3 つのカテゴリで data.frame を集約したいと思いますが、そのうちの 1 つが異なります。残念ながら、この 1 つの異なるカテゴリには NA が含まれています (実際には、これが変更する必要がある理由です)。ということで、リストを作成しましたdata.frames
。このリスト内のすべての data.frame には、3 つの変数に関する完全なケースのみが含まれています (変化する変数は 1 つだけです)。
これを再現しましょう:
library(plyr)
mydata <- warpbreaks
names(mydata) <- c("someValue","group","size")
mydata$category <- c(1,2,3)
mydata$categoryA <- c("A","A","X","X","Z","Z")
# add some NA
mydata$category[c(8,10,19)] <- NA
mydata$categoryA[c(14,1,20)] <- NA
# create a list of dfs that contains TRUE FALSE
noNAList <- function(vec){
res <- !is.na(vec)
return(res)
}
testTF <- lapply(mydata[,c("category","categoryA")],noNAList)
# create a list of data.frames
selectDF <- function(TFvec){
res <- mydata[TFvec,]
return(res)
}
# check x and see that it may contain NAs as long
# as it's not in one of the 3 categories I want to aggregate over
x <-lapply(testTF,selectDF)
## let's ddply get to work
doddply <- function(df){
ddply(df,.(group,size),summarize,sumTest = sum(someValue))
}
y <- lapply(x, doddply);y
y
私が得たいものに非常に近い
$category
group size sumTest
1 A L 375
2 A M 198
3 A H 185
4 B L 254
5 B M 259
6 B H 169
$categoryA
group size sumTest
1 A L 375
2 A M 204
3 A H 200
4 B L 254
5 B M 259
6 B H 169
しかし、3 番目の可変変数 (この場合は と ) に対する集計を実装する必要がありcategory
ますcategoryA
。と同じように:
group size category sumTest sumTestTotal
1 A H 1 46 221
2 A H 2 46 221
3 A H 3 93 221
など。名前 (x) を lapply に追加するにはどうすればよいですか? またはここにループまたは環境が必要ですか?
編集:カテゴリまたはカテゴリAのいずれかをミックスに追加することに注意してください。実際には、相互に排他的なカテゴリ変数が約 15 あります。