r - R数据表用零分配行和列的子集
问题描述
我试图通过用零值填充未来的时间步长来将数据表分解为时间序列。起始数据表具有以下结构。V1
和的值V2
可以被认为是第一个时间步的值。
dt <- data.table(ID = c(1,2,3), V1 = c(1,2,3), V2 = c(4,5,6))
ID V1 V2
1: 1 1 4
2: 2 2 5
3: 3 3 6
我想要的是这样的数据表
ID year V1 V2
1: 1 1 1 4
2: 1 2 0 0
3: 1 3 0 0
4: 1 4 0 0
5: 1 5 0 0
6: 2 1 2 5
7: 2 2 0 0
8: 2 3 0 0
9: 2 4 0 0
10: 2 5 0 0
11: 3 1 3 6
12: 3 2 0 0
13: 3 3 0 0
14: 3 4 0 0
15: 3 5 0 0
我已经分解了原始数据表并在year
列中附加了以下内容
dt <- dt[, .(year=1:5), by=ID][dt, on=ID, allow.cartesian=T]
ID year V1 V2
1: 1 1 1 4
2: 1 2 1 4
3: 1 3 1 4
4: 1 4 1 4
5: 1 5 1 4
6: 2 1 2 5
7: 2 2 2 5
8: 2 3 2 5
9: 2 4 2 5
10: 2 5 2 5
11: 3 1 3 6
12: 3 2 3 6
13: 3 3 3 6
14: 3 4 3 6
15: 3 5 3 6
任何关于如何填充列V1
和V2
零的year!=1
想法将不胜感激。我还需要避免拼写V1
和V2
列名,因为我正在使用的实际数据表有 58 列。
解决方案
我在最后一步遇到了错误,但如果你有一个更新版本的 data.table ,它的行为完全不同,那就是:
dt[year != 1, V1 := 0] # logical condition in the 'i' position
dt[year != 1, V2 := 0] # data.table assign in the 'j' position
哎呀。没有读到最后。看看我是否可以测试一系列列。
范围可以在data.table.[
赋值运算符 ( :=
) 的 LHS 上构造:
> dt2[year != 1, paste0("V", 1:2) := 0 ]
> dt2
ID V1 V2 year
1: 1 1 4 1
2: 1 0 0 2
3: 1 0 0 3
4: 1 0 0 4
5: 1 0 0 5
6: 2 2 5 1
7: 2 0 0 2
8: 2 0 0 3
9: 2 0 0 4
10: 2 0 0 5
11: 3 3 6 1
12: 3 0 0 2
13: 3 0 0 3
14: 3 0 0 4
15: 3 0 0 5
推荐阅读
- r - R中另一列中的组的列中的总和值
- python - 使用 pytest + Pycharm 处理长字符串的烦人差异格式
- android - 使用按钮和百分比填充投票投票 Android Kotlin
- reactjs - 在 NextJS 中重用父组件的导航
- python - 如何用reg exp拆分以下数据?
- python - 如何避免通过 Matplotlib 中的给定点绘制一条线?
- reactjs - 在使用带有 Google 地图的 Material-UI 自动完成时摆脱任何问题
- base64 - 如何修改机器人代码以发布 Teams 的 base64 图像
- android - 2gis floor widget webview 在小米 9t 中无法正常工作
- javascript - SuiteScript 2.0 TypeError 无法调用未定义的方法“getValue”