首页 > 解决方案 > 从其他列移动具有滞后数据的列并根据需要放大数据框

问题描述

我有一个带有值的数据框,我需要一个新列,其中的值向下移动了一些行,但数据框必须获得更多行以容纳移位的数据。

到目前为止我得到了什么:

df <- data.frame(day=1:5,value=floor(runif(5, min=0, max=101))) 

>  df %>% dplyr::mutate(value2=dplyr::lag(value,n=2, default = 0)) 

  day value value2
1   1    19      0
2   2    78      0
3   3    18     19
4   4    14     78
5   5    10     18

预期结果:

  day value value2
1   1    19      0
2   2    78      0
3   3    18     19
4   4    14     78
5   5    10     18
6   6     0     14
7   7     0     10

坚持使数据框增长所需的行。

标签: rdplyr

解决方案


使用合并。使用所需的行数创建“目标”数据集,用 0 填充 NA 值,然后将滞后值重新映射到“value2”。将“滞后”存储为变量很有用,但有可能变得更加冗长。

have <- data.frame(
  day=  1:5,
  value = c(19, 78, 18, 14, 10),
  value2 = c(0, 0, 19, 78, 18)
)
target <- data.frame(
  day=1:7
)

want <- merge(have, target, by='day', all=T)
want[is.na(want)] <- 0
lag <- 2

## just one way of mapping a lagged response
want$value2 <- c(rep(0, lag), rev(rev(want$value)[-{1:lag}]))

推荐阅读