我在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)方法吗?
答案 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) )