r - 如何在R中滞后数据框的多个特定列
问题描述
我想滞后 R 中数据框的多个特定列。
让我们举这个通用的例子。假设我已经定义了我需要滞后的数据框的哪些列:
Lag <- c(0, 1, 0, 1)
Lag.Index <- is.element(Lag, 1)
df <- data.frame(x1 = 1:8, x2 = 1:8, x3 = 1:8, x4 = 1:8)
我的初始数据框:
x1 x2 x3 x4
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
6 6 6 6 6
7 7 7 7 7
8 8 8 8 8
我想计算以下数据框:
x1 x2 x3 x4
1 1 NA 1 NA
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
6 6 6 6 6
7 7 7 7 7
8 8 8 8 8
我会知道如何只为一个滞后列执行此操作,如此处所示,但无法找到一种方法以优雅的方式为多个滞后列执行此操作。很感谢任何形式的帮助。
解决方案
您可以使用purrr
'smap2_dfc
按列滞后不同的值。
purrr::map2_dfc(df, Lag, dplyr::lag)
# x1 x2 x3 x4
# <int> <int> <int> <int>
#1 1 NA 1 NA
#2 2 1 2 1
#3 3 2 3 2
#4 4 3 4 3
#5 5 4 5 4
#6 6 5 6 5
#7 7 6 7 6
#8 8 7 8 7
或与data.table
:
library(data.table)
setDT(df)[, names(df) := Map(shift, .SD, Lag)]
推荐阅读
- python - Python cursor.execute() 更新语句不返回使代码无响应
- tensorflow - 在 R-miniconda 中更新 Python 版本
- reactjs - 使用 web3 断开钱包与网站的连接
- laravel-8 - 提交评论后,它返回错误“尝试在 laravel 8 中获取非对象的属性 'id'”
- javascript - 无法使用 Javascript 为图标设置动画
- discord-jda - 如何在 JDA 频道中使用斜杠命令?
- python - 使用不平衡数据构建 ML 分类器
- r - 在网格中排列露天地块
- powershell - 恢复脚本的最佳实践
- .net-5 - .net5 中代码覆盖率的阈值验证