计算重复数量并将它们放在数据框的列中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算重复数量并将它们放在数据框的列中相关的知识,希望对你有一定的参考价值。

我想计算一列中重复的数量,并将它们添加到另一列到数据库。

例如,一些数据

a <- c(1,1,2,3,4,4)
b <- c("A","A","C","C","D","D")

df <- data.frame(a,b)

这是我正在寻找的结果:

  a b count
1 1 A     1
2 1 A     2
3 2 C     1
4 3 C     1
5 4 D     1
6 4 D     2
答案

试试这个:

df$count = sequence(rle(df$a)$lengths)
df
另一答案
df$count <- with(df, ave(rep(1, nrow(df)), b, a, FUN = cumsum))
另一答案

我们可以用data.table做到这一点

library(data.table)
setDT(df)[, count := seq_len(.N), .(a, b)]
df
#    a b count
#1: 1 A     1
#2: 1 A     2
#3: 2 C     1
#4: 3 C     1
#5: 4 D     1
#6: 4 D     2
另一答案

我遇到了类似的问题,但只需根据1列中的信息计算重复数。 user7298145的答案适用于小型数据框,但是我的数据有大约20k行并且因错误而失败:

Error: memory exhausted (limit reached?)
Error during wrapup: memory exhausted (limit reached?)

所以我创建了一个for循环,完成了这个技巧:

##  order the values that are duplicated
primary_duplicated <- primary_duplicated1[order(primary_duplicated1$md5), ]
##  create blank/NA column
primary_duplicated$count <- NA
##  set first value as 1
primary_duplicated$count[1] <- 1
##  set count of duplicates to 1 greater than the 
##  value of the preceding duplicate
for (i in 2:nrow(primary_duplicated)) {
      if (primary_duplicated$md5[i] == primary_duplicated$md5[i-1]) {
            primary_duplicated$count[i] <- primary_duplicated$count[i-1] + 1
      } else {
      ##  set the count value for the first incidence of
      ##  a duplicate as 1
            primary_duplicated$count[i] <- 1
      }
}

以上是关于计算重复数量并将它们放在数据框的列中的主要内容,如果未能解决你的问题,请参考以下文章

拆分数据框的列并将它们重新组合为一列而不显示空格

如何计算不同数据框的列之间的数值差异?

如何创建文本字段、调整它们的大小并将它们放在报表的列中的示例

如何通过单击适配器类中代码的项目中的删除按钮来删除列表视图中的项目后重新加载片段?

如何在数据框的列之间插入新列[重复]

对熊猫数据框的列应用差异[重复]