R到特定点的距离

时间:2014-08-10 13:21:24

标签: r matrix grouping distance

请考虑以下(简化矩阵)。

x1  <- c(2,2,2,3,1,2,4,6,1,2,4)
y1  <- c(5,4,3,3,4,2,1,6,4,2,3)
x2  <- c(8,2,7,3,1,2,2,2,1,2,6)
y2  <- c(1,3,3,3,1,2,4,3,1,2,8)
x3  <- c(4,4,1,2,4,6,3,2,4,6,9)
y3  <- c(1,2,3,3,1,2,4,6,1,2,1)
x4  <- c(4,4,1,2,4,6,3,2,4,6,9)
y4  <- c(1,2,3,3,1,2,4,6,1,2,1)
x5  <- c(4,1,2,4,6,2,3,3,6,2,9)
y5  <- c(1,3,3,3,1,2,4,6,1,2,1)
ID  <- c(1,2,3,4,5,6,7,8,9,10,11)
id1 <- c("a","a","a","a","b","b","b","b","b","b","b")
id2 <- c("f","f","g","h","h","i","j","k","k","k","l")
dat <- data.frame(x1,y1,x2,y2,x3,y3,id1, id2)

我想要实现的是获得每组id1的每个id2与所有其他id(不是id2)之间的平均距离。

我从

开始
matrix_split <- split(dat, dat$id1)

这使我得到了分裂矩阵,在这个简化的例子中2.我可以轻松创建距离矩阵,然后显示每个群组成员的平均距离:

dist <- lapply(matrix_split, function(x) dist(x, diag=TRUE, upper=TRUE))
dist2 <- lapply(dist, as.matrix)
mean <- lapply(dist2, rowMeans)

现在,我的问题是如何找到每行的ONLY平均距离。也就是说,在这个距离矩阵中,我只计算那些不是同一个id2元素的rowMeans函数。

例如,对于ID = 1,它位于“f”组中,不应该为rowMeans计算ID2。有没有办法这样做?这个例子是简化的,并且有大约400个矩阵,因此不包含每个单个矩阵的代码的操作将是好的。

所以而不是 DIST2 $一个

ID       1        2        3        4

1 0.000000 7.483315 5.416026 7.483315

2 7.483315 0.000000 6.928203 3.265986
3 5.416026 6.928203 0.000000 4.898979
4 7.483315 3.265986 4.898979 0.000000

这太好了!

ID       1        2        3        4

1 0.000000 NA       5.416026 7.483315
2 NA       0.000000 6.928203 3.265986
3 5.416026 6.928203 0.000000 4.898979
4 7.483315 3.265986 4.898979 0.000000

从那里我将继续使用rowMeans:

1 4.29978
2 3.398063
3 .... 
4 .... 

也许可以解决问题。有什么建议?现在谢谢!!托比

0 个答案:

没有答案