首页 > 解决方案 > 如何计算列中的重复项?

问题描述

我有一个带有 id 列的数据框,我想计算相同 id 出现的频率(该列已排序)。我找到了一种方法,使用 2 个 for 循环,但这肯定是非常低效的。有人可以提出更好的解决方案。

id <- c(15580, 16144, 16144, 16144, 16144, 16144, 17985, 17985, 17985, 17985)
df <- data.frame(id)
df <- cbind(df, tmp=1)

for(i in 2:nrow(df)) {
   if (df[i,1] == df[i-1,1]) {
      df[i,2] <- df[i-1,2] + 1
   }
}

df$cnt <- df$tmp

for(i in seq(nrow(df)-1,1,-1)){
   if (df[i,1] == df[i+1,1]) {
      df[i,3] <- df[i+1,3]
   }
}

我的代码的输出。列 cnt 包含我想要的计数。

      id tmp cnt
1  15580   1   1
2  16144   1   5
3  16144   2   5
4  16144   3   5
5  16144   4   5
6  16144   5   5
7  17985   1   4
8  17985   2   4
9  17985   3   4
10 17985   4   4

在第二步中,最好只获得此输出(仅唯一 ID 和计数):

    id cnt
 15580   1
 16144   5
 17985   4

标签: r

解决方案


我们可以这样做count直接进入第二步

library(dplyr)
count(df, id)
# A tibble: 3 x 2
#     id     n
#  <dbl> <int>
#1 15580     1
#2 16144     5
#3 17985     4

tablebase R

table(df$id)

如果我们必须先完成第 1 步,请transmute在按 'id' 分组后使用

stp1 <- df %>% 
         group_by(id) %>%
         transmute(cnt = n())

然后从'stp1',使用distinct

distinct(stp1)

推荐阅读