如何计算列中的重复项?

时间:2019-03-26 14:55:55

标签: r

我有一个带有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

1 个答案:

答案 0 :(得分:1)

我们可以使用count进行此操作,直接进入第二步

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

或者使用table中的base R

table(df$id)

如果我们必须首先执行步骤1,请在按“ id”分组后使用transmute

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

然后从“ stp1”开始,使用distinct

distinct(stp1)