Замените первый дублированный элемент в строках на NA, оставив остальные дублированные - PullRequest
2 голосов
/ 17 июня 2019

Я обнаружил, что строки в моем фрейме данных часто имеют 1-й элемент, дублированный другим элементом в той же строке. Я хочу заменить этот 1-й элемент, который дублируется на NA, и оставить другой элемент.

У моего dataframe есть много столбцов, но позвольте мне продемонстрировать это только с 3 столбцами c1, c2 и c3, как это

c1 c2 c3
1  1  4
5  2  9
3  1  8
7  2  7
9  9  1

Я хочу получить это

c1 c2 c3
NA 1  4
5  2  9
3  1  8
NA 2  7
NA 9  1

Не могли бы вы помочь мне, пожалуйста? Большое вам спасибо.

1 Ответ

3 голосов
/ 17 июня 2019

Мы можем использовать apply

df1[] <- t(apply(df1, 1, function(x) replace(x, duplicated(x, fromLast = TRUE) & 
              seq_along(x) == 1, NA)))
df1
#  c1 c2 c3
#1 NA  1  4
#2  5  2  9
#3  3  1  8
#4 NA  2  7
#5 NA  9  1

Или использовать векторизованную опцию с rowSums

df1[,1][rowSums(df1[,1] == df1[-1]) > 0] <- NA

данными

df1 <- structure(list(c1 = c(1L, 5L, 3L, 7L, 9L), c2 = c(1L, 2L, 1L, 
2L, 9L), c3 = c(4L, 9L, 8L, 7L, 1L)), class = "data.frame",
  row.names = c(NA, 
-5L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...