如何计算R中的条件出现?

时间:2013-08-16 16:05:34

标签: r conditional find-occurrences

我有一组数据:

Color Type axe

Green  1    2

Green  1    3

Green  0    1

Black  1    1

Black  0    2

Black  0    3

我想要一张表格,告诉我'Type'是绿色还是黑色多少次,'ax'是绿色还是黑色。

Type 

1   Green : 2 Black : 1

0   Green : 1 Black : 2

Axe

1   Green : 1 Black : 1

2   Green : 1 Black : 1

3   Green : 1 Black : 1

所以有条件的计数。我想使用函数'table',但它只是一个列出现次数。

谢谢!

3 个答案:

答案 0 :(得分:3)

table怎么样?

table( dat[ , c("Color" , "Type") ] )
       Type
Color   0 1
  Black 2 1
  Green 1 2

table( dat[ , c("Color" , "axe") ] )
       axe
Color   1 2 3
  Black 1 1 1
  Green 1 1 1

答案 1 :(得分:2)

这是另一种选择(也使用table):

table(cbind(mydf[1], stack(mydf[-1])))
# , , ind = axe
# 
#        values
# Color   0 1 2 3
#   Black 0 1 1 1
#   Green 0 1 1 1
# 
# , , ind = Type
# 
#        values
# Color   0 1 2 3
#   Black 2 1 0 0
#   Green 1 2 0 0

更新

这是一种“reshape2”方法:

library(reshape2)
x <- melt(mydf)
# Using Color as id variables
y <- dcast(x, value + variable ~ Color)
# Aggregation function missing: defaulting to length
split(y[-2], y[[2]])
# $Type
#   value Black Green
# 1     0     2     1
# 2     1     1     2
# 
# $axe
#   value Black Green
# 3     1     1     1
# 4     2     1     1
# 5     3     1     1

更新2

(再次代表基地R)......

在@ SimonO101的解决方案的基础上,这是一种更自动化的方式:

idvar <- "Color"
lapply(setdiff(names(mydf), idvar), function(y) table(mydf[, c(idvar, y)]))
# [[1]]
#        Type
# Color   0 1
#   Black 2 1
#   Green 1 2
# 
# [[2]]
#        axe
# Color   1 2 3
#   Black 1 1 1
#   Green 1 1 1

答案 2 :(得分:0)

您可以使用count包中的plyr

?count:

  

相当于as.data.frame(table(x)),但不包括   零计数的组合

library(plyr)
count(da,c('Color','Type'))

 Color Type freq
1 Black    0    2
2 Black    1    1
3 Green    0    1
4 Green    1    2