首页 > 解决方案 > R -- 为 group_by 中的任何重复值添加值

问题描述

我正在尝试识别数据框中 group_by 中的重复值,并将这些重复值变异到新列中。示例表如下所示:

ID 价值
1 约翰
1 麦克风
2 杰斯
2 阿隆
2 杰斯
3 卡尔
3 卡尔
3 约翰

我希望输出为:

ID 价值 骗子
1 约翰
1 麦克风
2 杰斯 杰斯
2 阿隆
2 杰斯 杰斯
3 卡尔 卡尔
3 卡尔 卡尔
3 约翰

我以前用过这个df_new <- df %>% group_by(id) %>% mutate(dupes = ifelse(n_distinct(Value)>1 ,Value,""))

但不确定如何修改它以提供所需的输出,也许使用any()连同case_when()函数?

标签: r

解决方案


使用 withlength()函数而不是n(). 逻辑和数据来自 akrun(非常感谢)!

  library(dplyr)
  df1 %>% 
    group_by(id, Value) %>%
    mutate(dupes = ifelse(length(Value) > 1 , Value, '')) %>%
    ungroup

输出:

     id Value dupes 
  <int> <chr> <chr> 
1     1 john  ""    
2     1 mike  ""    
3     2 jess  "jess"
4     2 aron  ""    
5     2 jess  "jess"
6     3 carl  "carl"
7     3 carl  "carl"
8     3 john  ""  

推荐阅读