Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 计算距离矩阵并放置在分组数据帧的单元格内_R_Dataframe_Distance Matrix - Fatal编程技术网

R 计算距离矩阵并放置在分组数据帧的单元格内

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", "

所以,基本上我有一个数据框,其中有很多项目的“位置集”,我想计算每个项目集的距离矩阵。我可以使用for循环并添加到列表中来实现这一点,但我认为一定有一种更优雅的方法使用dplyr、purrr或类似的方法,但我在如何继续上完全是空白

假设我的数据框如下所示:

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