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 回答