用NA替换行中第一个重复的元素,其余的重复

时间:2019-06-17 16:22:15

标签: r

我发现我数据框中的行通常具有第一个元素,该元素被同一行中的另一个元素重复。我想替换为NA的第一个元素,并保留另一个元素。

我的数据框有很多列,但是让我仅用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 个答案:

答案 0 :(得分:3)

我们可以使用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))