如何计算列表中唯一向量的数量



假设我有一个向量列表。 我想要该列表中唯一向量及其频率的列表。 我可以用unique获得唯一值的列表,但我无法弄清楚如何获得计数的向量。

my.list <- list(c(1, 1, 0), c(1, 1, 0))
> unique(my.list)  # gives correct answer
# [[1]]
# [1] 1 1 0

现在我想要一些东西,给我一个向量,让我知道unique(my.list)的每个元素重复的次数。 在这种情况下,这应该是元素的向量 2 .

使用 table 不起作用,因为它分别获取向量的每个元素(0 和 1 值):

> table(my.list)
#          my.list.2
# my.list.1 0 1
#         0 1 0
#         1 0 2

有什么想法吗? 我宁愿不将它们paste成一个字符串,然后在可以提供帮助的情况下将它们重新分成向量。

在整个列表与唯一列表上使用match

my.list <- list(c(1, 1, 0), c(1, 1, 0), c(2, 1, 0))
table(match(my.list,unique(my.list)))
#1 2 
#2 1
cbind(
  data.frame(id=I(unique(my.list))),  
  count=as.vector(table(match(my.list,unique(my.list)))) 
)
#       id count
#1 1, 1, 0     2
#2 2, 1, 0     1

一种方法,可能比它需要的更复杂:

library(dplyr)
df <- do.call(rbind, my.list) %>% as.data.frame()
df %>% group_by_(.dots = names(df)) %>% summarise(count = n())
# Source: local data frame [1 x 4]
# Groups: V1, V2 [?]
# 
#      V1    V2    V3 count
#   (dbl) (dbl) (dbl) (int)
# 1     1     1     0     2

编辑:

根据下面的评论,@docendodiscimus,group_bysummarise(n())相当于count_

df %>% count_(names(df))    # or just count_(df, names(df))
# Source: local data frame [1 x 4]
# Groups: V1, V2 [?]
# 
#      V1    V2    V3     n
#   (dbl) (dbl) (dbl) (int)
# 1     1     1     0     2

最新更新