删除一行中的重复单元格

标签 r

下面的问题是关于检测一行是否有重复的单元格。 我想问一下如何删除第2,第3,....重复项(只保留一个单元格)

Removing duplicate values row-wise in R

示例;团队 #6595380(第 4 行)有一个重复成员 - 人 #24432987 出现在 Person1 列和 Person5 列中。

Team    Person1   Person2   Person3   Person4   Person5  Person6  Person7
6594794 37505959  37469784    NA         NA       NA        NA      NA
6595053 30113392  33080042  21537147  32293683    NA        NA      NA
6595201 697417    22860111  NA           NA       NA        NA      NA
6595380 24432987  32370372  11521625   362790   24432987 22312802 32432267
6595382 12317669  25645492  NA           NA       NA        NA      NA
6595444 8114419   236357    32545314  22247108    NA        NA      NA
6595459 2135269   32332907  32332907  32436550    NA        NA      NA
6595468 33590928  10905322  32319555  10439608    NA        NA      NA
6595485 33080810  33162061  NA           NA       NA        NA      NA
6595496 36901773  34931641  NA           NA       NA        NA      NA
6595523 512193    8747403   NA           NA       NA        NA      NA
6595524 32393404  113514    NA           NA       NA        NA      NA
6595526 37855554  37855512  NA           NA       NA        NA      NA
6595536 18603977  1882599   332261    10969771  712339  2206680  768785

最佳答案

如果您的目标是将重复的行转换为 NA,那么您可以使用 duplicated 作为逻辑值来识别重复的行(在 pivot_longer ):

library(tidyverse)

df %>% 
  pivot_longer(cols = -Team) %>% 
  mutate(value = if_else(duplicated(cbind(Team, value)), NA_integer_, value)) %>% 
  pivot_wider(Team, names_from = name, names_sort = T)

#> # A tibble: 14 × 8
#>       Team  Person1  Person2  Person3  Person4 Person5  Person6  Person7
#>      <int>    <int>    <int>    <int>    <int>   <int>    <int>    <int>
#>  1 6594794 37505959 37469784       NA       NA      NA       NA       NA
#>  2 6595053 30113392 33080042 21537147 32293683      NA       NA       NA
#>  3 6595201   697417 22860111       NA       NA      NA       NA       NA
#>  4 6595380 24432987 32370372 11521625   362790      NA 22312802 32432267
#>  5 6595382 12317669 25645492       NA       NA      NA       NA       NA
#>  6 6595444  8114419   236357 32545314 22247108      NA       NA       NA
#>  7 6595459  2135269 32332907       NA 32436550      NA       NA       NA
#>  8 6595468 33590928 10905322 32319555 10439608      NA       NA       NA
#>  9 6595485 33080810 33162061       NA       NA      NA       NA       NA
#> 10 6595496 36901773 34931641       NA       NA      NA       NA       NA
#> 11 6595523   512193  8747403       NA       NA      NA       NA       NA
#> 12 6595524 32393404   113514       NA       NA      NA       NA       NA
#> 13 6595526 37855554 37855512       NA       NA      NA       NA       NA
#> 14 6595536 18603977  1882599   332261 10969771  712339  2206680   768785

如果目标是删除重复的单元格:

library(tidyverse)

df %>% 
  pivot_longer(cols = -Team, values_drop_na = T) %>% 
  distinct(Team, value, .keep_all = TRUE) %>% 
  pivot_wider(Team, names_from = name)

#> # A tibble: 14 × 8
#>       Team  Person1  Person2  Person3  Person4  Person6  Person7 Person5
#>      <int>    <int>    <int>    <int>    <int>    <int>    <int>   <int>
#>  1 6594794 37505959 37469784       NA       NA       NA       NA      NA
#>  2 6595053 30113392 33080042 21537147 32293683       NA       NA      NA
#>  3 6595201   697417 22860111       NA       NA       NA       NA      NA
#>  4 6595380 24432987 32370372 11521625   362790 22312802 32432267      NA
#>  5 6595382 12317669 25645492       NA       NA       NA       NA      NA
#>  6 6595444  8114419   236357 32545314 22247108       NA       NA      NA
#>  7 6595459  2135269 32332907       NA 32436550       NA       NA      NA
#>  8 6595468 33590928 10905322 32319555 10439608       NA       NA      NA
#>  9 6595485 33080810 33162061       NA       NA       NA       NA      NA
#> 10 6595496 36901773 34931641       NA       NA       NA       NA      NA
#> 11 6595523   512193  8747403       NA       NA       NA       NA      NA
#> 12 6595524 32393404   113514       NA       NA       NA       NA      NA
#> 13 6595526 37855554 37855512       NA       NA       NA       NA      NA
#> 14 6595536 18603977  1882599   332261 10969771  2206680   768785  712339

关于删除一行中的重复单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70632491/

相关文章:

r - R中绘图中同一组的循环点

r - 更新到 R 版本 3.4.2 后,pandoc 文档转换失败,错误 1

r - 无缝地适合两个SF多边形

r - 合并和删除*文件之间的冗余行

r - 如何修复拥挤的 tmap 图例中的垂直空间 [R]

一次替换和删除数据帧或多列中的第一个和最后一个百分位数

r - 在 R 中拟合曲线 "around"数据点

r - 计算每组的完整个案

r - 当数字以逗号作为小数分隔符时,将 xlsx 数据导入到 R

r - 选择矩阵的前 n 行