Итак, у меня есть 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).(тот же вариант, но с другой итерацией rnorm) - Для каждого
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) (то же самое изменение, но с другой итерацией rnorm).
И так далее для каждого возрастающего значения 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повторяются определенное количество раз. Столбец1 имеет более 300 тыс. Значений, поэтому скользящий цикл необходимо динамически масштабировать.
Вот что я пробовал:
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)]
}}
Спасибо!