是否有R函数在n-1行之间有区别

时间:2019-07-16 19:39:40

标签: r

我下面有一个数据集

    A  B
1   1 11
2   2 13
3   3 15
4   4 17
5   5 18
6   6 20
7   7 25
8   8 30
9   9 40
10 10 80

我需要创建一个名为C的新列,并在2和11、3和13之间有区别,依此类推。最终输出应该是

    A  B   C
1   1 11   NA
2   2 13   9
3   3 15   10 
4   4 17   11
5   5 18   12
6   6 20   12
7   7 25   13
8   8 30   17
9   9 40   21
10 10 80   30 

3 个答案:

答案 0 :(得分:2)

您可以在R基中执行此操作-

df$C <- c(NA, df$B[-nrow(df)]) - df$A

答案 1 :(得分:1)

您可以使用shift软件包中的data.table功能-

代码

> setDT(data)[ , C := shift(B) - A]    
> data
     A  B  C
 1:  1 11 NA
 2:  2 13  9
 3:  3 15 10
 4:  4 17 11
 5:  5 18 12
 6:  6 20 12
 7:  7 25 13
 8:  8 30 17
 9:  9 40 21
10: 10 80 30    

输入数据-

data <- read.table(text = "   A  B
   1 11
   2 13
   3 15
   4 17
   5 18
   6 20
   7 25
   8 30
   9 40
  10 80",header=T)

答案 2 :(得分:1)

最直观的方法是按照@camille的建议使用lag()

data %>% mutate(C=lag(B)-A)

    A  B  C
1   1 11 NA
2   2 13  9
3   3 15 10
4   4 17 11
5   5 18 12
6   6 20 12
7   7 25 13
8   8 30 17
9   9 40 21
10 10 80 30