Чистый код из комментария PavoDive
dt[!is.na(value), mean(value), by = .(price, week)]
и даже лучше
dt[ , mean(value, na.rm = TRUE), by = .(price, week)]
Оригинал: Работает с использованием data.table
.Первая часть отфильтровывает строки, которые не имеют числа в значении.Далее следует сказать, что мы хотим получить среднее значение из столбца значений.Final by определяет, как группировать строки.
Код:
dt[value >0 | value<1, .(MeanValues = mean(`value`)), by = c("Price", "Week")][]
Ввод:
dt <- data.table(`Price` = c("A","B","B","A","A","B","B","A"),
`Week`= c(1,2,1,1,2,2,1,2),
`value` = c(3,7,2,NA,1,46,1,NA))
Price Week value
1: A 1 3
2: B 2 7
3: B 1 2
4: A 1 NA
5: A 2 1
6: B 2 46
7: B 1 1
8: A 2 NA
Вывод:
1: A 1 3.0
2: B 2 26.5
3: B 1 1.5
4: A 2 1.0