我有一组数据:
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',但它只是一个列出现次数。
谢谢!
答案 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
(再次代表基地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