1

私はこのようなRのデータフレームを持っています

> 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

このように、各レベルで「はい」のカウントをしたいのですが

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

ヒントはありますか?よろしくお願いします。

4

2 に答える 2

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
于 2012-05-13T14:02:34.900 に答える
-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)
于 2012-05-13T14:12:09.797 に答える