在下一行但不同的列中减去另一个元素?

时间:2014-09-21 04:31:15

标签: r

基本上我正在寻找一个对数据帧起作用的diff()函数,它可以从行n + 1中的另一个元素中减去行n中的一个元素,但也在另一列中。

所以,使用dataframe:

> df = data.frame(X=c("x1","x2","x3"), Y=c("y1","y2","y3"))
   X  Y
1 x1 y1
2 x2 y2
3 x3 y3

我想做df$Z=df$Y-df$Z但是有“滞后”所以我得到了:

> df$Z
[1] NULL y2-x1 y3-x2

当然没有使用循环,我从来没有在R ......中看到过如此缓慢的事情......

2 个答案:

答案 0 :(得分:1)

现在确定为什么你必须通过使用字符值来使你的例子变得困难,但是

c(NA, with(df, paste(tail(Y,-1), head(X,-1), sep="-")))

显示您要执行的减法。如果数据实际上是数字

df$Z <- c(NA, with(df, tail(Y,-1) - head(X,-1)))

应该做的伎俩

答案 1 :(得分:0)

尝试(您显示了一些因子列而不是数值)。如果列是数字,

 df$Z <- c(NA,df$Y[-1]- df$X[-nrow(df)])

或使用with

 df$Z <-   with(df, c(NA,Y[-1]- X[-length(X)]))

解释

提供的数据

 df$Y[-1]  #removes the first observation
 #[1] y2 y3
 #Levels: y1 y2 y3
 df$X[-nrow(df)] #removes the last observation
 #[1] x1 x2
 #Levels: x1 x2 x3

因此,当我们采取差异时,它将是y2-x1y3-x2