在数据帧的成对行上操作

时间:2010-04-11 03:05:37

标签: r

我在R中有一个数据框,我想对所有行对进行计算。有没有比使用嵌套for循环更简单的方法呢?

为了使这个具体,考虑一个有十行的数据框,我想计算所有(45)个可能的对之间的分数差异。

> data.frame(ID=1:10,Score=4*10:1)
   ID Score
1   1    40
2   2    36
3   3    32
4   4    28
5   5    24
6   6    20
7   7    16
8   8    12
9   9     8
10 10     4

我知道我可以使用嵌套for循环进行此计算,但是有更好的(更多R-ish)方法吗?

4 个答案:

答案 0 :(得分:7)

要计算差异,也许可以使用

outer(df$Score,df$Score,"-")

答案 1 :(得分:5)

这是使用combn的另一种解决方案:

df <- data.frame(ID=1:10,Score=4*10:1)
cm <- combn(df$ID,2)
delta <- df$Score[cm[1,]]-df$Score[cm[2,]]

或更直接

df <- data.frame(ID=1:10,Score=4*10:1)
delta <- combn(df$ID,2,function(x) df$Score[x[1]]-df$Score[x[2]])

答案 2 :(得分:3)

colmx = matrix(rep(df[,2], 10), ncol=10, byrow=F)
rowmx = matrix(rep(df[,2], 10), ncol=10, byrow=T)
delta = colmx - rowmx

答案 3 :(得分:3)

dist()是你的朋友。

dist(df$Score)

你可以把它作为一个矩阵:

as.matrix( dist(df$Score) )