从这些数据中,我想要一个新列(" From "),其中每一行累积值的第一个值。它实际上应该是列"cum"的最后一个值+ 1。用函数怎么做呢?假设有很多行
a <- c(5,5,4,3)
cum <- cumsum(a)
df <- data.frame(a,cum)
df
a cum
5 5
5 10
4 14
3 17
df$from <- c(1,6,11,15)
df
a cum from
5 5 1
5 10 6
4 14 11
3 17 15
一个可能的解决方案是使用lag()
,然后使用head()
来删除创建的向量
df$from <- head(c(1, lag(df$cum + 1)), -1)
df
# a cum from
# 1 5 5 1
# 2 5 10 6
# 3 4 14 11
# 4 3 17 15
library(tidyverse)
a <- c(5,5,4,3)
cum <- cumsum(a)
df <- data.frame(a,cum)
df %>%
mutate(from = lag(cum, default = 0) + 1)
#> a cum from
#> 1 5 5 1
#> 2 5 10 6
#> 3 4 14 11
#> 4 3 17 15
由reprex包(v1.0.0)创建于20121-03-01
基本R选项
transform(
df,
from = c(1, head(cum, -1) + 1)
)
为
a cum from
1 5 5 1
2 5 10 6
3 4 14 11
4 3 17 15