我有一个很大的数据框,并试图在一行中查找重复的元素,然后用空字符串替换所有重复的值,除非它们第一次出现在行中:
df = matrix( c(2, 4, 2, 1, 5, 1, 3, 3, 4),nrow=3,ncol=3,byrow = TRUE)
# V1 V2 V3
#1 2 4 2
#2 1 5 1
#3 3 3 4
我已经尝试过了,但是用NA代替了所有
df[which(t(apply(df,1,function(x)
duplicated(x) | duplicated(x, fromLast = T))), arr.ind = T)] <- ""
结果如下:
V1 V2 V3
1 NA 4 NA
2 NA 5 NA
3 NA NA 4
但是我希望结果是:
V1 V2 V3
1 2 4 NA
2 1 5 NA
3 3 NA 4
答案 0 :(得分:1)
将apply
与MARGIN = 1
一起使用(逐行),我们可以连续replace
duplicated
个值到NA
。
t(apply(df, 1, function(x) replace(x, duplicated(x), NA)))
# [,1] [,2] [,3]
#[1,] 2 4 NA
#[2,] 1 5 NA
#[3,] 3 NA 4