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

Duc*_*uck 0 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))
Run Code Online (Sandbox Code Playgroud)

我想创建一个名为 的新列diff.var。该列保存变量中各行的差异结果。一种可能的解决方案是使用diff()函数。当我使用这个函数时,我得到了这个:

diff(df$x4)
[1]   2   6 -10   1   0   8   3
Run Code Online (Sandbox Code Playgroud)

这工作正常,但是当我尝试使用我的数据框应用时,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
Run Code Online (Sandbox Code Playgroud)

由于第一行没有前一行来计算差异,因此我想将其设置为零。我想要得到这样的东西:

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
Run Code Online (Sandbox Code Playgroud)

diff.var由于该元素没有前一个元素,因此第一个元素为零。我想构建一个函数来将第一个元素设置为零diff.var,这使得下一行产生差异。我希望创建一个包含所有变量的新数据框,diff.var因为ID它用于后验分析diff.vardiff()不允许创建这个新变量。感谢您的帮助。

Pau*_*oso 5

这个问题之前已经在本论坛中提出过,并且可以在其他地方找到。无论如何,按照弗兰克的建议去做

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
Run Code Online (Sandbox Code Playgroud)