R行操作第i行-第j行

R row operation line i - line j

我需要计算连续行之间的差异。 有聪明的方法吗? 下面的解决方案有效。谢谢

pos=data.frame(position=c(1,2,3),value=c(1.3,2.7,3.1))
     position value
  1        1   1.3
  2        2   2.7
  3        3   3.1

r=NULL; rnome=NULL 
for(i in seq(1,length(pos[,1])-1))  
    for(j in seq(i+1,length(pos[,1]))) 
        r=rbind(r,c(levels=paste0(pos$level[i],'-', pos$level[j]), dif=pos$value[j]-pos$value[i]))

> r
    levels dif  
[1,] "1-2"  "1.4"
[2,] "1-3"  "1.8"
[3,] "2-3"  "0.4"

combn 函数可以帮助您稍微概括一下代码。这看起来更优雅一点:

pos <- data.frame(position=c(1,2,3),value=c(1.3,2.7,3.1))

ans <- data.frame(levels = combn(pos$position, 2, FUN = paste, collapse = "-"),
                  dif = combn(pos$value, 2, FUN = diff))
print(ans)
#  levels dif
#1    1-2 1.4
#2    1-3 1.8
#3    2-3 0.4

# Get all combinations:
comb <- expand.grid(pos$position, pos$position)
lvls <- with(comb, paste0(Var1, "-", Var2))
difs <- with(comb, Var1 - Var2)
ans2 <- data.frame(levels = lvls, dif = difs)
print(ans2)
#  levels dif
#1    1-1   0
#2    2-1   1
#3    3-1   2
#4    1-2  -1
#5    2-2   0
#6    3-2   1
#7    1-3  -2
#8    2-3  -1
#9    3-3   0