Я хочу "перебрать" строки таблицы data.table и вычислить среднее значение для каждой строки. Среднее значение должно рассчитываться на основе следующего механизма:
Data1
во всех строках j
, которые соответствуют этим двум критериям: ID(j) = ID(i)
и T1( j) = T2(i)
Введите вычисленное среднее значение в столбец Data2 строки i
DF = data.frame(ID=rep(c("a","b"),each=6),
T1=rep(1:2,каждый=3), T2=c(1,2,3), Data1=c(1:12))
DT = data.table (DF)
DT[, Данные2:=NA_real_]
ID T1 T2 Данные1 Данные2
[1,] а 1 1 1 нет данных
[2,] а 1 2 2 н/п
[3,] а 1 3 3 н/п
[4,] а 2 1 4 н/п
[5,] а 2 2 5 н/п
[6,] а 2 3 6 н/п
[7,] б 1 1 7 н/д
[8,] б 1 2 8 н/д
[9,] б 1 3 9 н/д
[10,] б 2 1 10 н/п
[11,] б 2 2 11 н/д
[12,] б 2 3 12 н/п
Для этого простого примера результат должен выглядеть следующим образом:
ID T1 T2 Data1 Data2
[1,] a 1 1 1 2
[2,] a 1 2 2 5
[3,] a 1 3 3 NA
[4,] a 2 1 4 2
[5,] a 2 2 5 5
[6,] a 2 3 6 NA
[7,] b 1 1 7 8
[8,] b 1 2 8 11
[9,] b 1 3 9 NA
[10,] b 2 1 10 8
[11,] b 2 2 11 11
[12,] b 2 3 12 NA
Я думаю, что один из способов сделать это — пройтись по строкам в цикле, но я думаю, что это неэффективно. Я просмотрел функцию apply()
, но уверен, что она решит мою проблему. Я мог бы также использовать data.frame
вместо data.table
, если бы это сделало его намного эффективнее или намного проще. Реальный набор данных содержит примерно 1 миллион строк.