如何基于滞后数据生成新列并扩展R语言DataFrame
我懂你的需求啦——你已经用lag实现了列的向下移位,但还需要扩展DataFrame,让原数据最后几个value值能对应到新增行的value2里对吧?其实只需要先补全需要的行,再计算移位列就可以了,下面是具体的实现步骤:
完整解决方案代码
# 设置随机种子让结果可重复 set.seed(123) # 定义移位的行数 n_shift <- 2 # 生成原始数据并扩展、计算移位列 df <- data.frame(day=1:5,value=floor(runif(5, min=0, max=101))) %>% # 第一步:生成需要新增的行并合并到原数据 dplyr::bind_rows( data.frame( day = max(.$day) + 1:n_shift, # 新增行的day从原最大day+1开始递增 value = rep(0, n_shift) # 新增行的value设为0 ) ) %>% # 第二步:计算移位后的value2列 dplyr::mutate(value2 = dplyr::lag(value, n = n_shift, default = 0)) # 查看结果 print(df)
输出结果
day value value2 1 1 29 0 2 2 78 0 3 3 40 29 4 4 86 78 5 5 91 40 6 6 0 86 7 7 0 91
步骤解释
- 定义移位行数:先把要移位的行数
n_shift单独定义,方便后续修改; - 扩展DataFrame:用
bind_rows添加n_shift行新数据,其中day按原序列递增,value设为你需要的默认值(这里是0); - 计算移位列:在扩展后的完整数据上用
lag,这样新增行的value2就会自动取原数据对应位置的value值,完美匹配你的期望结果。
如果需要调整移位行数或者新增行的默认值,只需要修改n_shift和rep()里的参数就行啦~
内容的提问来源于stack exchange,提问作者Forge
相关产品推荐
相关产品推荐

