【发布时间】:2019-01-31 22:04:21
【问题描述】:
所以我有一个data.table,我需要根据列的索引填充值,然后还要根据占位符字符。示例:
V1 V2 V3 V4
Row1 1 1 a d
Row2 1 1 a d
Row3 1 1 a d
Row4 1 2 a h
Row5 1 2 a h
Row6 1 2 a h
Row7 2 1 b i
Row8 2 1 b i
Row9 2 1 b i
Row10 2 2 b t
Row11 2 2 b t
Row12 2 2 b t
....
Row350k ...
我需要弄清楚的是如何编写一个for 循环,其中包含沿第1 列索引滑动的引用语句赋值。基本上
对于每个列索引,一次一个:
- 对于每个
V1 = 1和V2 = 1,将字符“a”替换为一个 0.0055 + rnorm(1, 0.0055, 0.08) 的迭代。 - 对于每个
V1 = 1和V2 = 2将字符 'a' 替换为 0.0055 + 的一次迭代 rnorm(1, 0.0055, 0.08)。 (相同的变化,但有另一个迭代 规范) - 对于每个
V1 = 2和V1 = 1,将字符“b”替换为 一次迭代 0.0055 + rnorm(1, 0.001, 0.01) - 对于每个
V1 = 2和V1 = 1,将字符 'b' 替换为 0.0055 + 的一次迭代 rnorm(1, 0.001, 0.01) (相同的变化,但有另一个迭代 规范)。
对于 Col1 和 Col2 的每个递增值,依此类推。实际上,它有 20 多行,而不是第二个索引只有 2 行。
然后想要的输出是:
Col1 Col2 Col3 Col4
Row1 1 1 0.00551 d
Row2 1 1 0.00551 d
Row3 1 1 0.00551 d
Row4 1 2 0.00553 h
Row5 1 2 0.00553 h
Row6 1 2 0.00555 h
Row7 2 1 0.0011 i
Row8 2 1 0.0011 i
Row9 2 1 0.0011 i
Row10 2 2 0.0010 t
Row11 2 2 0.0010 t
Row12 2 2 0.0010 t
....
Row350k ...
只是不确定如何使用循环执行此操作,因为 col1 中的值重复了一定次数。 Column1 有 300k 以上的值,因此滑动循环需要动态扩展。
这是我尝试过的:
for (i in seq(1, 4000, 1))
{for (ii in seq(1, 2, 1)) {
data.table[V3 == "a" , V3 := 0.0055 + rnorm(1, 0.0055, 0.08)]
data.table[V3 == "b" , V3 := 0.0055 + rnorm(1, 0.001, 0.01)]
}}
谢谢!
【问题讨论】:
-
根据您的描述,结果似乎取决于 V1,但是您在示例中使用了 V3。是 V3 = ifelse(V1 ==1, "a", "b")
-
对不起,它应该是 V3 而不是 V55。我正在用数字替换 V3 中 a 或 b 的值。
-
我已编辑我的答案以使用 V3
标签: r loops data.table increment