我发现我数据框中的行通常具有第一个元素,该元素被同一行中的另一个元素重复。我想替换为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
可以帮我吗?非常感谢。
答案 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))