我想聚合3個類別的數據框架,其中一個不同。不幸的是,這一個不同的類別包含了NAs(實際上這是它需要改變的原因)。因此我創建了一個data.frames
的列表。此列表中的每個data.frame都只包含三個變量的完整情況(只有其中一個變化)。聚合包含ddply和lapply的NAs的類別?
讓我們重現此:
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
但我需要實現超過三分之一的不同變量的聚集,這是在這種情況下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
等等。我如何向lapply添加名稱(x),還是我需要一個循環或環境?
編輯: 請注意,我希望任何類別或類別A添加到混合。實際上我有大約15個互斥的絕對變量。
在某種意義上,這是一個後續問題此主題:http://stackoverflow.com/questions/8897927/how-can-i-use-ddply-with-varying-variables – 2012-01-18 16:25:25
'RM( list = ls())是一個非常迂迴的行,它包含在代碼中,人們可能會複製粘貼到他們的會話中,試圖幫助你。 ;) – joran 2012-01-18 18:16:35
關於古蘭經,我希望它不會爲你迷戀本週的工作。刪除它。 – 2012-01-18 18:37:35