我有这个矩阵mymat
。我知道我可以table((mymat[,"col1"])
来获取col1
中每个项目的数量。但是,如果col2中有唯一值,我只想要计数。对于下面的mymat
,我想要这个结果:
app gg chh
1 2 1
mymat
col1 col2
app d
app d
gg e
gg f
gg e
chh f
chh f
chh f
答案 0 :(得分:8)
您可以使用unique
对数据进行分组(适用于matrix
和data.frame
),然后拨打table
:
table(unique(mymat)[,1])
返回
# app chh gg
# 1 1 2
答案 1 :(得分:7)
您可以使用duplicated
对数据进行分组,然后调用table
:
table(subset(df, !duplicated(paste(col1, col2)), select = col1))
#app chh gg
# 1 1 2
作为第二种选择,这是一个明智的方法:
library(dplyr)
distinct(df) %>% count(col1) # or distinct(df, col1, col2) if you have other columns
#Source: local data frame [3 x 2]
#
# col1 n
# (fctr) (int)
#1 app 1
#2 chh 1
#3 gg 2
答案 2 :(得分:1)
这是在计算table()中的非零值 - 结果
rowSums(table(df$col1, df$col2)!=0)
结果:
app chh gg
1 1 2
使用的数据:
df <- read.table(header=TRUE, text=
"col1 col2
app d
app d
gg e
gg f
gg e
chh f
chh f
chh f")
答案 3 :(得分:0)
其他建议更好,但在这里我只为多样性投入了另一种可能性:
apply(dcast(df, col1 ~ col2)[-1], 1, function(x) {sum(x > 0)})