如何计算而不在R中聚合

时间:2017-05-22 11:48:45

标签: r count aggregate

我在R中有一个大表,需要计算其中一列中值的出现次数,并将计数放在它自己的一列中。没有汇总。

所以,如果我有:

var
23456
34567
45678
23456
etc

我的输出应该是:

var      count
23456     2
34567     1
45678     1
23456     2
etc

我已经阅读了所有主题,但似乎无法在不进行聚合的情况下找到一种方法。我需要的是相当于excel的count(A1:A4;A1)

3 个答案:

答案 0 :(得分:7)

使用ave。假设您的起始df定义如下:

df<-structure(list(var = c(23456L, 34567L, 45678L, 23456L)), .Names = "var", class = "data.frame", row.names = c(NA, 
-4L))
df
#    var
#1 23456
#2 34567
#3 45678
#4 23456

然后:

df$count<-ave(df$var,df$var,FUN=length)
#    var count
#1 23456     2
#2 34567     1
#3 45678     1
#4 23456     2

答案 1 :(得分:4)

我们可以使用data.table

library(data.table)
setDT(dat)[, n := .N, var]
dat
#     var n
#1: 23456 2
#2: 34567 1
#3: 45678 1
#4: 23456 2

或者使用add_count中的dplyr(目前仅在开发版中提供):

library(dplyr)
dat %>%
     add_count(var)
# A tibble: 4 x 2
#    var     n
#  <int> <int>
#1 23456     2
#2 34567     1
#3 45678     1
#4 23456     2

答案 2 :(得分:3)

group_by中的n()dplyr函数可以解决问题。

library(dplyr)

dat <- data.frame(var = c(23456, 34567, 45678, 23456))

dat %>%
  group_by(var) %>%
  mutate(n())

# Source: local data frame [4 x 2]
# Groups: var [3]
# 
#     var `n()`
#   <dbl> <int>
# 1 23456     2
# 2 34567     1
# 3 45678     1
# 4 23456     2