首页 > 解决方案 > 如何通过使用 dplyr 在 R 中附加索引来替换重复的行值?

问题描述

我想通过在给定列中添加下划线来替换给定列中的重复行值,方法是根据它们的发生率附加一个索引。例如

old_df_col new_df_col
object object_1
object object_2
object object_3
object object_4

大多数其他问题都集中在使用 NA 删除或替换重复值,因此我无法使用Rand找到实现dplyr

这是我到目前为止所做的

# count duplicates
mtcars %>% group_by(carb) %>% summarize(n=n())

# filter duplicates
mtcars %>% group_by(carb) %>% filter(n()>1)

标签: rdplyrtidyr

解决方案


您可以按目标变量分组并用于row_number()创建序列。

显然,您可能必须事先对数据集进行排序(使用arrange()),以便该序列对您的数据具有一定的意义,但并非绝对必要。

library(dplyr)

mtcars %>% group_by(carb) %>% 
  arrange(carb, cyl, mpg, hp) %>% 
  mutate(
    carb_seq = paste("carb", carb, "seq", row_number(), sep = "_")
  )
# A tibble: 32 x 12
# Groups:   carb [6]
     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb carb_seq    
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>       
 1  21.5     4 120.     97  3.7   2.46  20.0     1     0     3     1 carb_1_seq_1
 2  22.8     4 108      93  3.85  2.32  18.6     1     1     4     1 carb_1_seq_2
 3  27.3     4  79      66  4.08  1.94  18.9     1     1     4     1 carb_1_seq_3
 4  32.4     4  78.7    66  4.08  2.2   19.5     1     1     4     1 carb_1_seq_4
 5  33.9     4  71.1    65  4.22  1.84  19.9     1     1     4     1 carb_1_seq_5
 6  18.1     6 225     105  2.76  3.46  20.2     1     0     3     1 carb_1_seq_6
 7  21.4     6 258     110  3.08  3.22  19.4     1     0     3     1 carb_1_seq_7
 8  21.4     4 121     109  4.11  2.78  18.6     1     1     4     2 carb_2_seq_1
 9  22.8     4 141.     95  3.92  3.15  22.9     1     0     4     2 carb_2_seq_2
10  24.4     4 147.     62  3.69  3.19  20       1     0     4     2 carb_2_seq_3
# … with 22 more rows

reprex 包于 2021-07-11 创建 (v2.0.0 )


推荐阅读