使用NA填充数据框行内的特定重复值

时间:2013-01-22 22:10:14

标签: r duplicates

对于我的数据帧的每一行,我目前正在尝试选择所有重复的值等于4,以便将它们设置为“等于”NA。

我的数据框是这样的:

dat <- read.table(text = "

   1  1  1  2  2  4  4  4  
   1  2  1  1  4  4  4  4", 

header=FALSE)

我需要获得的是:

   1  1  1  2  2  4   NA  NA
   1  2  1  1  4  NA  NA  NA 

我找到了有关如何消除重复行或列的信息,但我真的不知道如何继续这里...非常感谢您的帮助

3 个答案:

答案 0 :(得分:5)

有时您会想要避免使用apply,因为它会破坏数据框对象的多类功能。这是by方法:

> do.call(rbind, by(dat, rownames(dat), 
        function(line) {line[ duplicated(unlist(line)) & line==4 ] <- NA; line} ) )
  V1 V2 V3 V4 V5 V6 V7 V8
1  1  1  1  2  2  4 NA NA
2  1  2  1  1  4 NA NA NA

答案 1 :(得分:3)

whichapply在这里很有帮助。

> dat <- t(apply(dat, 1, function(X) {X[which(X==4)][-1] <- NA ; X})) 
> dat
[1,]  1  1  1  2  2  4 NA NA
[2,]  1  2  1  1  4 NA NA NA

但是这里可能还有一种方法可以使用转置(t)功能,任何人都可以帮助我吗?

答案 2 :(得分:3)

duplicated可以通过这种方式与apply

一起使用
dat <- t(apply(dat, 1, function(x) {x[duplicated(x) & x == 4] <- NA ; x}))