2012-05-13 10 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でのデータフレームを持って、各レベルで「はい」の数を持っているこの

 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 
関連する問題