使用dplyr保留重复行并将指定列重复值置空的实现方法
dplyr实现方案
核心逻辑
按前3列分组后,仅保留每组第一行的前3列原值,分组内其余行的前3列统一置为空值,第4列全程保留原值不做修改。
完整代码
首先加载依赖包:
library(dplyr)
先构造你给出的示例数据集方便测试:
df <- tibble( Col1 = c(101, 101, 303, 404), Col2 = c("Dog", "Dog", "Cat", "Dog"), Col3 = c("Sep", "Sep", "Oct", "Sep"), Col4 = c("Grooming", "Birthday", "Birthday", "Grooming") )
执行数据转换:
df_result <- df %>% # 按前3列分组识别重复行 group_by(Col1, Col2, Col3) %>% # 前3列仅保留组内第一行的值,其余行置空 mutate(across(1:3, ~ifelse(row_number() == 1, as.character(.), ""))) %>% # 取消分组避免后续操作受影响 ungroup()
说明
- 代码中
across(1:3)对应前3列,不需要手动写列名,列结构变化时只需修改索引范围即可 - 用
as.character()转换是为了统一列类型(空字符串为字符型),如果你可以接受NA值作为空值,可以去掉转换,直接写~ifelse(row_number() == 1, ., NA)即可 - 输出结果和你给出的预期格式完全一致
内容的提问来源于stack exchange,提问作者user35131
相关产品推荐
相关产品推荐

