Этот вопрос является продолжением предыдущего вопроса, который я опубликовал, но который я понял, терпит неудачу, когда я веду группировку. linkСмешивание SDcols с ifelse и сгруппированными переменными
Мне нужно, чтобы вычислить среднее значение переменной в, сгруппированных на клиента и знак, если сделка произошла в определенный период времени.
Моя попытка:
library(data.table)
client_id <- c("A", "A", "B", "B", "B", "B", "B", "A", "A", "B", "B")
value <- c(10, 35, 20, 30, 50, 40, 30, 40, 30, 40, 10)
period_30 <- c(1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0)
period_60 <- c(1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0)
sign <- c("D", "D", "D", "D", "C", "C", "C", "D", "D", "D", "D")
test <- data.frame(client_id, value, period_30, period_60, sign)
result <- setDT(test)[, lapply(.SD, function(i) {ifelse(1 %in% i, mean(test$value), 0)}),
.SDcols = period_30:period_60,
by=.(client_id, sign)]
С выше результата я получаю код нонсенс, но я полагаю, я нахожусь на правильном пути. Я просто не знаю, как исправить инструкцию ifelse.
Ожидаемый результат
Client ID average_value_period30 average_value_period60
A 22.5 29
Кто-нибудь?
на основе данных, которые вы показали, тем 'average_value_period60' 22.5 (если я не ошибаюсь) для CLIENT_ID А – akrun