R 如何计算列中的重复项?

R 如何计算列中的重复项?,r,R,我有一个带有id列的数据框,我想计算相同id出现的频率(列被排序)。我找到了一种方法,使用2表示循环,但这肯定是非常低效的。有人能想出更好的解决办法吗 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] == d

我有一个带有id列的数据框,我想计算相同id出现的频率(列被排序)。我找到了一种方法,使用2表示循环,但这肯定是非常低效的。有人能想出更好的解决办法吗

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]
   }
}
在第二步中,最好只获得此输出(仅限唯一ID和计数):


我们可以使用
count
直接进入第二步

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

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

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

在链接中,您可以使用(df,as.data.frame(table(id)))执行
library(dplyr)
count(df, id)
# A tibble: 3 x 2
#     id     n
#  <dbl> <int>
#1 15580     1
#2 16144     5
#3 17985     4
table(df$id)
stp1 <- df %>% 
         group_by(id) %>%
         transmute(cnt = n())
distinct(stp1)