计算R中行之间的差异并设置为零第一差异

时间:2014-03-14 22:16:39

标签: r

大家好我想解决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()不允许创建此新变量。谢谢你的帮助。

1 个答案:

答案 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