私の集計のニーズは、列/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の前に、私のニーズを明確にします。