Предположим следующий фиктивный фрейм данных:
dt <- data.table(A=c("a", "a", "a", "b", "b", "b", "c", "c", "c", "d", "d", "d"),
B=c("e", "e", "e", "e", "e", "e", "f", "f", "f", "f", "f", "f"),
C=1:12,
D=13:24)
Я хотел бы рассчитать некоторую статистику (скажем, среднее и стандартное отклонение) для каждого числового столбца ("C" и "D") и каждый раз сгруппировать по столбцам коэффициентов c ("A"), c (" B ") и c (" A "," B). В реальном фрейме данных у меня есть около 40 числовых столбцов, 10 столбцов факторов, которые группируются в различные комбинации, и большой список статистики, который я хотел бы рассчитать.
Основываясь на ответе (от @thelatemail), который я получил из предыдущего вопроса, я знаю, что могу использовать приведенный ниже код для работы с группировками факторов (по =), используя список:
groupList <- list(c("A", "B"), c("A"), c("B"))
out <- vector("list", 3)
out <- lapply(
groupList,
function(x) {
dt[, .(mean=mean(C), sd=sd(C)), by=x]
}
)
Теперь я хотел бы пойти дальше и создать переменную, содержащую список имен числовых столбцов во фрейме данных, и использовать имя этой переменной в функции выше. Я вышел со следующим кодом, но, к сожалению, он не работает. Моя идея состоит в том, чтобы использовать цикл для извлечения значения из measureList при каждом повороте и помещать это значение в среднее значение, sd-функции. Есть идеи? Цикл - это то, как я склонен думать об этих вещах, но я буду рад избавиться от него, если он сделает код более быстрым или более эффективным (особенно потому, что у одного из столбцов факторов у меня есть 90 уровней). Буду признателен за любой указатель, чтобы решить эту проблему! Спасибо.
factorList <- list(c("A"), c("B"), c("A", "B"))
measureList <- list(c("C"), c("D"))
out <- vector("list", 2)
for(i in 1:length(measureList)){
out[[i]] <-lapply(
factorList,
function(x) {
dt[, .(mean=mean(eval(measureList[[i]])),
sd=sd(eval(measureList[[i]]))),
by = x]
}
)
}