Разделить таблицу данных по позиции - PullRequest
2 голосов
/ 29 мая 2020

Я хочу вычислить среднее значение столбца способом data.table, используя номера строк или вектор с позицией.

Вот пример данных и вектор позиции:

x <- data.table(a = c(1,2,3,4,5,6,7,8))
pos <- c(3,5)

Я пробовал:

x[mean(a), by = pos]

Итак, мне нужно среднее значение из строк 1: 2, 3: 4 и 5: 8.

Ответы [ 2 ]

3 голосов
/ 29 мая 2020

Вы можете использовать findInterval / cut для создания групп на основе pos:

library(data.table)
x[, mean(a), findInterval(a, pos)]

#   findInterval  V1
#1:            0 1.5
#2:            1 3.5
#3:            2 6.5
3 голосов
/ 29 мая 2020

Вот вариант:

x[, mean(a), cumsum(replace(rep(0, nrow(x)), pos, 1L))]

вывод:

   cumsum  V1
1:      0 1.5
2:      1 3.5
3:      2 6.5
...