r - 保留 R 中一行中的非重复值

标签 r

我正在寻找在 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 |  
+----------------------+---------------------------------+-----------+----------+-----------+-----------

最佳答案

如果我们想要替换所有重复项,请使用 duplicated by row 以及 applyMARGIN = 1

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)))


df1
#               session                        session_b         A         B         C         D
#1 162f2f8f7c5x8f6de8f8 e5c44c77b9cae93afa9457e535c81451 588238268 587606411        NA        NA
#2 162f2f8f7c5x8f6de8f8 e5c44c77b9cae93afa9457e535c81451 591266911 591257117 568939090 587606411

数据

df1 <- structure(list(session = c("162f2f8f7c5x8f6de8f8", "162f2f8f7c5x8f6de8f8"
), session_b = c("e5c44c77b9cae93afa9457e535c81451", "e5c44c77b9cae93afa9457e535c81451"
), A = c(588238268L, 591266911L), B = c(587606411L, 591257117L
), C = c(581149505L, 568939090L), D = c(581149505L, 587606411L
)), class = "data.frame", row.names = c(NA, -2L))

关于r - 保留 R 中一行中的非重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61110914/

相关文章:

r - 循环获取代码簿打印 null 的列名称

r - 将文本文件解析为数据框

r - R 中的时间序列预测,单变量时间序列

r - 在 Shiny 中仅从复选框组获取一次值

r - session 如何在 Shiny 服务器中工作?

r - 使用docker时如何运行带有入口点的Rscript?

r - 在数据帧中的一个因子的所有级别中选择 n 个随机采样的连续行

R - 按键查找连续值的最大数量

r - 使用 ggplot2 为原生圆形图增添趣味

r - 对列表中数据框中的每个嵌套数据框应用函数