我有一个数据集,其中包含不同个人对一系列变量的评级.每个人通过唯一的ID号区分,为两个目标对每个变量进行评级:为自己(目标=S)和其他人(目标=o).数据帧的简化模型如下所示:
id <- c("123", "123", "234", "234", "345", "345", "456", "456", "567", "567")
target <- c("s", "o", "s", "o", "s", "o", "s", "o", "s", "o")
v1 <- c(1, 2, 3, 7, 2, 5, 4, 4, 1, 3)
v2 <- c(7, 6, 5, 7, 1, 3, 5, 4, 1, 1)
v3 <- c(2, 2, 2, 4, 5, 2, 7, 1, 3, 3)
df <- data.frame(id, target, v1, v2, v3)
我想找出所有变量中每个人的self 评价和他人评价之间的欧几里得距离.理想情况下,我希望最终结果如下所示:
id <- c("123", "234", "345", "456", "567")
euclidean_distance <- c(1.414214, 4.898979, 4.690416, 6.082763, 2)
df_final <- data.frame(id, euclidean_distance)
我如何为一个人做到这一点的一个例子是:
id_123 <- df %>%
filter(id == 123)
dist(select(id_123, v1:v3))
然而,这需要很长时间才能一次完成一个(我的实际数据集有数百个人,而不是只有5个人),而且我更有可能一次手工完成所有这些操作时犯下转录错误.所以我正试图找出一种方法来迭代所有的个体(即每个唯一的ID号),以获得每个个体的一个欧几里得距离输出值.
你对如何实现这一目标有什么建议吗?任何帮助非常感谢!