【发布时间】:2020-04-08 22:15:34
【问题描述】:
我正在寻找在 Stackoverflow 上找不到的解决方案。 我有一个包含数百万行的数据框,如下所示:
+----------------------+----------------------------------+-----------+-----------+-----------+----------
| session | session_b | A | B | C | D |
+----------------------+----------------------------------+-----------+-----------+-----------+----------
| 162f2f8f7c5x8f6de8f8 | e5c44c77b9cae93afa9457e535c81451 | 588238268 | 587606411 | 581149505 | 581149505 |
| 162f2f8f7c5x8f6de8f8 | e5c44c77b9cae93afa9457e535c81451 | 591266911 | 591257117 | 568939090 | 587606411 |
+----------------------+----------------------------------+-----------+-----------+-----------+----------
我的目标是从 A 到 D 检查每一行的重复值。如果有重复值,我想保留非重复值。在上表的结果下方。
+----------------------+----------------------------------+-----------+-----------+---------+--------+---
| session | session_b | A | B | C | D |
+----------------------+---------------------------------+-----------+----------+-----------+-----------
| 162f2f8f7c5x8f6de8f8 | e5c44c77b9cae93afa9457e535c81451| 588238268 | 587606411| |
| 162f2f8f7c5x8f6de8f8 | e5c44c77b9cae93afa9457e535c81451| 591266911 | 591257117| 568939090 | 587606411 |
+----------------------+---------------------------------+-----------+----------+-----------+-----------
【问题讨论】:
-
你需要
df1[c('A', 'B', 'C', 'D')] <- t(apply(df1[c('A', 'B', 'C', 'D')], 1, function(x) replace(x, duplicated(x)|duplicated(x, fromLast = TRUE), NA))) -
差不多,看第一行,我删除了重复项。您的代码删除了第二次出现。
-
也许你在编辑之前看过代码
-
您可以在下面查看我的解决方案,该解决方案完全符合预期输出。在这里,我使用
NA而不是空格 -
完美! c 之前缺少一个逗号,但它可以正常工作!非常感谢:)。
标签: r