2012-05-13 35 views
1

我有這樣總結了字符串列和計數選擇串

> head(data) 
    var1 var2 var3 var4 level 
1 Yes Yes Unknown  No level1 
2 No Yes  No  Yes level2 
3 Yes No  Yes Unknown level1 
4 Yes Yes Unknown  Yes level2 

我想在R A數據幀在每個級別有「是」的計數,這樣

 var1 var2 var3 var4 
level1  2 1 1 0 
level2  1 2 0 2 

任何暗示?提前致謝。

回答

-1
data.aux <- data.frame(data[,1:3] == "Yes", level = data[, 'level']) 
uni <- unique(data[, 'level']) 
f <- sapply(uni, function(x) colSums(data.aux[data.aux[, 'level']==x, 1:3])) 
data.frame(t(f), levels = uni) 
0

首先我創建了一個假的數據幀...

# first a handy helper function :-) 
set.seed(123) 
f1 <- function(N) { sample(c('Yes','No','Unknown'), N, replace=TRUE) } 
# how many rows do I want in my fake data.frame? 
N <- 15 
data <- data.frame(var1=f1(N),var2=f1(N),var3=f1(N),var4=f1(N), 
    level=sample(c('level1','level2'),N, replace=TRUE)) 

現在我用的是表函數...

# this gives me how many 'Yes' as the TRUE column for the 'var1' column 
table(data$level, data$var1=='Yes') 
      FALSE TRUE 
    level1  5 2 
    level2  7 1 

# alternatively I just say for all the levels of var1 
table(data$level, data$var1)   
     No Unknown Yes 
    level1 3  2 2 
    level2 3  4 1 

這可以被擴展到你要找的內容。 ..

或使用plyr ...

library(plyr) 
f2 <- function(x, c='Yes') { length(which(x==c)) } 
f3 <- function(ndf) { res <- c(); for(i in 1:ncol(ndf)) res <- c(res, f2(ndf[,i])) ; res } 
ddply(data, .(level), f3) 
    level V1 V2 V3 V4 V5 
1 level1 2 5 2 3 0 
2 level2 1 0 4 4 0