将行中的重复数据替换为NA(第一个除外)

时间:2019-06-08 14:12:07

标签: r

我有一个很大的数据框,并试图在一行中查找重复的元素,然后用空字符串替换所有重复的值,除非它们第一次出现在行中:

 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

1 个答案:

答案 0 :(得分:1)

applyMARGIN = 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