R 计算距离矩阵并放置在分组数据帧的单元格内
所以,基本上我有一个数据框,其中有很多项目的“位置集”,我想计算每个项目集的距离矩阵。我可以使用for循环并添加到列表中来实现这一点,但我认为一定有一种更优雅的方法使用dplyr、purrr或类似的方法,但我在如何继续上完全是空白 假设我的数据框如下所示:R 计算距离矩阵并放置在分组数据帧的单元格内,r,dataframe,distance-matrix,R,Dataframe,Distance Matrix,所以,基本上我有一个数据框,其中有很多项目的“位置集”,我想计算每个项目集的距离矩阵。我可以使用for循环并添加到列表中来实现这一点,但我认为一定有一种更优雅的方法使用dplyr、purrr或类似的方法,但我在如何继续上完全是空白 假设我的数据框如下所示: df <- data.frame( trial = c(rep(1,3),rep(2,5),rep(3,7)), object_name = c("stapler", "bottle", "cup", "ball", "
df <- data.frame(
trial = c(rep(1,3),rep(2,5),rep(3,7)),
object_name = c("stapler", "bottle", "cup", "ball", "chocolate","tape","pen","bowl","stapler", "bottle", "cup", "ball", "tape","pen","bowl"),
posX = c(0.1,0.2,0.3,0.3,0.2,0.5,-0.4,-0.1,0.8,-0.3,-0.4,0.3,0.2,0,-0.2),
posY = c(-0.2,0.5,0.3,0.9,-0.3,-0.1,0,0.6,-0.7,-1,0.2,0.3,-0.8,0.6,1)
)
df您可以在split
后使用lappy
df-by-trial,它允许计算每次试验的距离
您可以在split
df by trial之后使用lappy
来计算每次试验的距离
谢谢你。我还为未来的用户找到了dplyr解决方案:data%%>%groupby(SubID、block、cluster、trial、phase)%%>%select(posX、posZ、name.of.object)%%>%nest()%%>%mutate(dist\u matrix=map(data、dist))
谢谢。我还为未来的用户找到了dplyr解决方案:data%%>%groupby(SubID、block、cluster、trial、phase)%%>%select(posX、posZ、name.of.object)%%>%nest()%%>%mutate(dist\u matrix=map(data、dist))
lapply(split(df, df$trial), function(x) dist(cbind(x$posX,x$posY)))
#lapply(split(df, df$trial), function(x) dist(cbind(x$posX,x$posY), diag = TRUE, upper = TRUE)) #For a matrix
#$`1`
# 1 2
#2 0.7071068
#3 0.5385165 0.2236068
#
#$`2`
# 1 2 3 4
#2 1.2041595
#3 1.0198039 0.3605551
#4 1.1401754 0.6708204 0.9055385
#5 0.5000000 0.9486833 0.9219544 0.6708204
#
#$`3`
# 1 2 3 4 5 6
#2 1.1401754
#3 1.5000000 1.2041595
#4 1.1180340 1.4317821 0.7071068
#5 0.6082763 0.5385165 1.1661904 1.1045361
#6 1.5264338 1.6278821 0.5656854 0.4242641 1.4142136
#7 1.9723083 2.0024984 0.8246211 0.8602325 1.8439089 0.4472136