Мои агрегатные потребности различаются между столбцами /data.frames. Я хотел бы динамически передавать аргумент "list" в data.table.
В качестве минимального примера:
require(data.table)
type <- c(rep("hello", 3), rep("bye", 3), rep("ok",3))
a <- (rep(1:3, 3))
b <- runif(9)
c <- runif(9)
df <- data.frame(cbind(type, a, b, c), stringsAsFactors=F)
DT <-data.table(df)
Этот вызов:
DT[, list(suma = sum(as.numeric(a)), meanb = mean(as.numeric(b)), minc = min(as.numeric(c))), by= type]
будет иметь аналогичный результат:
type suma meanb minc
1: hello 6 0.1332210 0.4265579
2: bye 6 0.5680839 0.2993667
3: ok 6 0.5694532 0.2069026
В будущих data.frames будет больше столбцов, которые я хочу обобщить по-разному. Но ради работы с этим небольшим примером: есть ли способ перечислить список программно?
Я наивно пытался:
# create a different list
mylist <- "list(lengtha = length(as.numeric(a)), maxb = max(as.numeric(b)), meanc = mean(as.numeric(c)))"
# new call
DT[, mylist, by=type]
Со следующей ошибкой:
1: hello
2: bye
3: ok
mylist
1: list(lengtha = length(as.numeric(a)), maxb = max(as.numeric(b)), meanc = mean(as.numeric(c)))
2: list(lengtha = length(as.numeric(a)), maxb = max(as.numeric(b)), meanc = mean(as.numeric(c)))
3: list(lengtha = length(as.numeric(a)), maxb = max(as.numeric(b)), meanc = mean(as.numeric(c)))
Любые подсказки оценены! С наилучшими пожеланиями!
PS извините за эти as.numeric()
, я не мог понять, почему, но я нуждался в них для примера для запуска.
Незначительное редактирование вставленных столбцов/перед data.frame в начальном предложении для уточнения моих потребностей.