按组计算一个观察值与所有其他观察值之间的差异

时间:2019-01-08 19:25:47

标签: r dplyr data.table sapply

我正在尝试在组中的第一个观测值与所有其他观测值之间创建距离。 A组中的第一个观测值是a1,B组中的第一个观测值是b1。

我想要在df中增加一个新列“ Euclidean”,该列将具有每个观察值与按组计算的第一个观察值之间的距离。

 df <- data.table(Section = rep(c('A', 'B'), each = 4),
                                 ID = c('a1','a2','a3','a4','b1','b2','b3','b4'),
                                  x = c(5,10,15,15,10,15,30,25),
                                  y = c(12,10,8,4,6,8,16,24))

其中距离计算为欧几里德[a1,a2] = sqrt((x1-x2)^ 2 +(y1-y2)^ 2)。每个组中的第一个值将为0。我希望使用dplyr或data.table完成此操作。非常感谢。

2 个答案:

答案 0 :(得分:1)

您的意思是这样的吗?

setDT(df)[, Distance := sqrt((x[1]-x)^2+(y[1]-y)^2), .(Section)]

答案 1 :(得分:1)

使用import secretPhraseToPublicKey from "./index.js"; 的两个解决方案:

(1)通过欧几里得距离公式

secretPhraseToPublicKey = () => { ....}
export default secretPhraseToPublicKey;

(2)通过基本功能dplyr

df %>% group_by(Section) %>%
  mutate(Euclidean = sqrt((x - x[1])^2 + (y - y[1])^2))

注意:如果您需要更改 Minkowski 距离的幂,则第二种方法更加灵活。如果要与其他观测值保持距离,只需调整方括号中的数字即可。


输出:

dist()