大家好我想解决R中的一个小问题。我想计算R中数据框中行之间的差异。我的数据框看起来像这样:
df <- data.frame(ID=1:8, x2=8:1, x3=11:18, x4=c(2,4,10,0,1,1,9,12))
我想创建一个名为diff.var
的新列。此列保存变量中行的差异结果。一个posibble解决方案是使用diff()
函数。当我使用这个功能时,我得到了这个:
diff(df$x4)
[1] 2 6 -10 1 0 8 3
工作正常但是当我尝试使用df$diff.var=diff(df$x4)
在我的数据框中应用时,我得到了这个:
Error in `$<-.data.frame`(`*tmp*`, "diff.var", value = c(2, 6, -10, 1, :
replacement has 7 rows, data has 8
由于第一行没有前一行来计算差异,我想将其设置为零。我想得到一些东西:
ID x2 x3 x4 diff.var
1 8 11 2 0
2 7 12 4 2
3 6 13 10 6
4 5 14 0 -10
5 4 15 1 1
6 3 16 1 0
7 2 17 9 8
8 1 18 12 3
由于此元素,diff.var
的第一个元素为零,并且没有前一个元素。我想构建一个函数来设置diff.var
的firts元素为零,这会产生下一行的差异。我希望创建一个包含所有变量和diff.var
的新数据框,因为ID
用于diff.var
的后验分析。 diff()
不允许创建此新变量。谢谢你的帮助。
答案 0 :(得分:2)
这个问题在本论坛已经asked before,可以在其他地方找到。无论如何,做弗兰克建议
df <- data.frame(ID=1:8, x2=8:1, x3=11:18, x4=c(2,4,10,0,1,1,9,12))
df$vardiff <- c(0, diff(df$x4))
df
ID x2 x3 x4 vardiff
1 1 8 11 2 0
2 2 7 12 4 2
3 3 6 13 10 6
4 4 5 14 0 -10
5 5 4 15 1 1
6 6 3 16 1 0
7 7 2 17 9 8
8 8 1 18 12 3