计算R中值出现(并将其附加到每一行)的次数

时间:2017-03-31 13:58:17

标签: r

所以我想计算每个值在矢量中出现的次数,并创建一个EQUAL长度的新矢量,以将其与初始值绑定。所以我的解决方案不能是 table 函数,因为它只返回它们出现的唯一值和时间。我需要在初始向量的每个行中追加其出现次数。我找到了一个解决方案,但我得到了一个大约800k行的大型数据库,运行时间为10分钟。有谁知道如何更有效地执行此任务?我举了一个例子。谢谢

df<-as.data.frame(sample(1:100, 800000, replace = T))
df[2]<-rep(1,nrow(df))
names(df)<-c("Numbers","Count")

df$Count<-pbapply(df,1,function(x) length(which(df$Numbers==df$Numbers[x])))

P.S。我已经习惯了 pbapply 函数来跟踪进度。

2 个答案:

答案 0 :(得分:0)

如果您想要计算Number中每个唯一商品的数量,这在dplyr

中很简单
library(dplyr)
set.seed(123)
df<-data.frame(Numbers = sample(1:100, 800000, replace = T))
df2 <- df %>%
  group_by(Numbers) %>%
  mutate(Count = n())
head(df2)

# Numbers Count
# 51      8146
# 49      7961
# 3       8090
# 63      8072
# 80      8017
# 80      8017

答案 1 :(得分:0)

这样可以解决问题:

df<-data.frame(Numbers=sample(1:100, 800000, replace = T))

Count <- ddply(df, .(Numbers), summarize, Count=length(Numbers)) #Unique values and how many times they appear

Indices<-match(df$Numbers, Count$Numbers) #Use match to add counts to data frame
df$Count <- Count$Count[Indices]