我在R中有一个大表,需要计算其中一列中值的出现次数,并将计数放在它自己的一列中。没有汇总。
所以,如果我有:
var
23456
34567
45678
23456
etc
我的输出应该是:
var count
23456 2
34567 1
45678 1
23456 2
etc
我已经阅读了所有主题,但似乎无法在不进行聚合的情况下找到一种方法。我需要的是相当于excel的count(A1:A4;A1)
。
答案 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