Сохранять неповторяющиеся значения из строки в R - PullRequest
2 голосов
/ 09 апреля 2020

Я искал решение, которое не смог найти в 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 |  
+----------------------+---------------------------------+-----------+----------+-----------+-----------

1 Ответ

2 голосов
/ 09 апреля 2020

Если мы хотим заменить все дубликаты, используйте duplicated по строке с apply и MARGIN = 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

data

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...