R等价于SQL SELECT COUNT(*)... GROUP BY

时间:2015-04-02 13:15:19

标签: r count group-by

我试图找到如何计算向量中每种类型的整数数。例如,有多少1,2和3(没有硬编码== 1,2,3):

test_vec = c(1,2,3,1,2,1,2,1,1,1,2,1,3,1,2,3,2,1,2,1,3)

并且,如何识别我向向量添加了4个并计算它们?

test_vec = c(test_vec,4,4,4)

我可以使用range()和循环执行此操作,但想知道是否存在常规矢量化解决方案?

编辑:与this不同的问题,因为该问题不会询问广义的table情况(尽管答案合理地表明了这一点),而是检查硬编码的等式{{1} }

5 个答案:

答案 0 :(得分:4)

您可以使用表格

table(test_vec)
test_vec
 1  2  3 
10  7  4 

答案 1 :(得分:3)

在这种情况下,

aggregate非常方便

> aggregate(data.frame(count = test_vec), list(value = test_vec), length)

  value count
1     1    10
2     2     7
3     3     4

答案 2 :(得分:2)

您也可以使用data.table包来计算每个组中的元素数量。

library(data.table)
as.data.table(x = test_vec)[, .N, by=x]
#   x  N
#1: 1 10
#2: 2  7
#3: 3  4
#4: 4  3

.N是一个特殊的内置变量,是一个长度为1的整数。它保留了每组中的观察数量。

答案 3 :(得分:2)

dplyr方法:

test_vec = c(1,2,3,1,2,1,2,1,1,1,2,1,3,1,2,3,2,1,2,1,3)
library(dplyr)
df <- data_frame(test_vec)

df %>% 
    count(test_vec)

# Alternative that shows group_by
df %>%
    group_by(test_vec) %>%
    summarise(n = n()) # or tally()

#   test_vec  n
# 1        1 10
# 2        2  7
# 3        3  4

答案 4 :(得分:1)

到问题的第二部分

> which(test_vec == 4)

[1] 22 23 24  # gives you their position in the vector in order to "identify" them

> sum(test_vec == 4) 

[1] 3 # counts the 4's in the vector

编辑:我们在这里提到一切,

tapply(test_vec, test_vec, length)

也可以使用

 1  2  3 
10  7  4