问题描述
我是 R 编程的新手,并试图弄清楚以下内容。下表包含每个观察的欧几里得距离和聚类详细信息。表中有超过 100000 个不同的 id,并且对于每个 id 值,已经为每个集群计算了距离。有 6 个簇命名为 1-6。
我需要计算最后一列,它应该是属于该集群的每个观察的概率值。这是由第一个条目给出的,
每个概率值都是根据该 id 的 6 个距离值计算的。该表采用 data.table 格式。 我想尝试这样的事情。但我什至不知道如何完成那行。
dt_calc[,prob_value := (1 / (distance/dt_calc[distance,by = .(id,cluster== 1 )]) ^ 2),by = id]
id | 集群 | 距离 | prob_value |
---|---|---|---|
1 | 1 | d1 | p1 |
1 | 2 | d2 | ? |
1 | 3 | d3 | ---- |
1 | 4 | d4 | ---- |
1 | 5 | d5 | ---- |
1 | 6 | d6 | ---- |
2 | 1 | d7 | ---- |
2 | 2 | d8 | ---- |
2 | 3 | d9 | ---- |
2 | 4 | d10 | ---- |
2 | 5 | d11 | ---- |
2 | 6 | d12 | ---- |
谁能告诉我如何计算这个 prob_value 列。
解决方法
我不确定 = .EACHI 在这里的效率如何,但这似乎有效。我无法弄清楚按引用分配时为什么会出错,所以我将其转储到一个新的 data.table 中,但这至少可以让您找到某个地方。
dt <- data.table(id = rep(c(1,2),each = 6),cluster = rep(1:6,distance = sample(100,size = 12,replace = TRUE))
test <- dt[dt,1/sum((i.distance/distance) ^ 2),on = .(id),by = .EACHI]