- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含多列的数据框,但有两列对我来说特别有趣。Column1 包含值 0 和一个数字 (>0)Column2 也包含数字。
我想创建 21 个新列,其中包含给定 Column1 的 Column2 中的新信息。
因此,当 Column1 为正数(不是 0)时,我希望第一个新列 Column01 从 Column2 中获取返回 10 的值。 Column02 向后移动 9,.. Column11 与 Column2 值完全相同。.. Column21 向前移动 10。
例如
Column 1 Column2 Columns01 Columns02.. Columns11..Columns20 Columns21
0 5 0 0 0 0 0
0 2 0 0 0 0 0
0 0 0 0 0 0 0
1 3 0 0 3 5 4
0 10 0 0 0 0 0
0 83 0 0 0 0 0
0 2 0 0 0 0 0
0 5 0 0 0 0 0
0 4 0 0 0 0 0
1 8 0 5 8 5 3
0 6 0 0 0 0 0
0 5 0 0 0 0 0
0 55 0 0 0 0 0
0 4 0 0 0 0 0
2 3 10 83 3 5 0
0 2 0 0 0 0 0
0 3 0 0 0 0 0
0 4 0 0 0 0 0
0 5 0 0 0 0 0
0 3 0 0 0 0 0
1 22 6 5 22 0 0
0 12 0 0 0 0 0
0 0 0 0 0 0 0
0 5 0 0 0 0 0
希望这对您有意义并且可以提供帮助。
最佳答案
这是使用data.table v1.9.5
中新实现的shift()
函数的一种方法。 :
require(data.table) ## v1.9.5+
setDT(dat) ## (1)
cols = paste0("cols", sprintf("%.2d", 1:21)) ## (2)
dat[, cols[1:10] := shift(Column2, 10:1, fill=0)] ## (3)
dat[, cols[11] := Column2] ## (4)
dat[, cols[12:21] := shift(Column2, 1:10, fill=0, type="lead")] ## (5)
dat[Column1 == 0, (cols) := 0] ## (6)
假设 dat
是您的data.frame,setDT(dat)
将其转换为data.table,通过引用(为了提高效率,数据不会物理复制到内存中的新位置)。
生成所有列名称。
生成带有句点 10:1
的 Column2
滞后向量,并将其分配给前 10 列。
第 11 列 = Column2
。
生成带有句点 1:10
的 Column2
前导向量,并将其分配给最后 10 列。
获取 Column1 == 0
的所有行的索引,并将这些索引的所有新生成的列替换/重置为 0
。
如果您想要返回data.frame,请使用setDF(dat)
。
您可以将其包装在具有值 -10:10
的函数中,并选择 type="lag"
或 type="lead"
因此,取决于值是负数还是正数。我将把它留给你。
关于r - IF THEN 在带有 LAG 的 r 数据帧上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29393227/
我是一名优秀的程序员,十分优秀!