複数のスライスと単一の応答変数にまたがる多数のデータ フレームの要約統計量を計算しています。私は現在、DFのリストを関数に渡すことでこれを行っています。しかし、私の関数は列 (ie-slices) を個別に指定する必要があります。これにより、プロセスが劇的にスピードアップします。しかし、apply() ファミリー関数を介してこれを行うには、さらに効率的な方法が必要だと思います。ここの誰かが私を助けてくれることを願っています。
これが私のコードです:
table1 <- function(x) {
dl2 <- list()
for (i in 1:length(x)) {
z <- x[[i]]
t.sliceA <- addmargins(table(list(z$sliceA, z$Growing)))
t.sliceB <- addmargins(table(list(z$sliceB, z$Growing)))
t.sliceC <- addmargins(table(list(z$sliceC, z$Growing)))
t.sliceD <- addmargins(table(list(z$sliceD, z$Growing)))
...
t.sliceAA <- addmargins(table(list(z$sliceAA, z$Growing)))
table.list <- list(t.sliceA, t.sliceB, t.sliceC, ... , t.sliceAA)
names(table.list) <- c("t.sliceA", "t.sliceB", ... , "t.sliceAA")
dl2[[i]] <- table.list
}
assign("dl",dl2, envir=.GlobalEnv)
}
# run the function
dl <- c(DF1, DF2, ..., DF.n)
table1(dl)
必要な列を指定するだけでよい lapply() 経由でこれを行うには、より効率的な方法が必要だと思います。行を置き換えるもの
t.sliceA <- [blah]
...
t.sliceAA <- [blah]
次のようなもので:
apply(z[,c(1:4,10:12,15)],2, function(x) addmargins(table(list(x,z$Growing))))
あなたが提供できるどんな助けも非常に役に立ちます。ありがとう!
更新: 再現可能な例 @Chase これが不十分だった場合はお詫びします。githubを使うのは初めてです。
https://gist.github.com/3719220
コードは次のとおりです。
# load the example datasets
a.small <- dget("df1.txt")
l.small <- dget(df2.txt)
# working function that I'd like to simplify
table1 <- function(x) {
dl2 <- list()
for (i in 1:length(x)) {
z <- x[[i]]
t.tenure <- addmargins(table(list(z$Tenure.Group, z$Growing)))
t.optfile <- addmargins(table(list(z$opt.file, z$Growing)))
t.checking <- addmargins(table(list(z$checking, z$Growing)))
t.full <- addmargins(table(list(z$add.full, z$Growing)))
t.optdm <- addmargins(table(list(z$opt.dm, z$Growing)))
t.up <- addmargins(table(list(z$add.up, z$Growing)))
t.off <- addmargins(table(list(z$offmode, z$Growing)))
table.list <- list(t.tenure, t.optfile, t.checking, t.full, t.optdm, t.up, t.off)
names(table.list) <- c("t.tenure", "t.optfile", "t.checking", "t.full", "t.optdm", "t.up", "t.off")
dl2[[i]] <- table.list
}
assign("dl",dl2, envir=.GlobalEnv)
}
# create a DF list to send to the function
dl <- list(a.small, l.small)
table1(dl) # run the function