如何获取

时间:2016-03-15 15:12:29

标签: r

我有这个矩阵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

4 个答案:

答案 0 :(得分:8)

您可以使用unique对数据进行分组(适用于matrixdata.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)})