我下面有一个数据集
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
答案 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