4

对于我的数据框的每一行,我目前正在尝试选择所有等于 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 

我找到了有关如何消除重复行或列的信息,但我真的不知道如何在此处进行。非常感谢您的帮助

4

3 回答 3

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
于 2013-01-22T22:35:12.183 回答
3

duplicated可以以这种方式与 a 一起使用apply

dat <- t(apply(dat, 1, function(x) {x[duplicated(x) & x == 4] <- NA ; x}))
于 2013-01-22T22:26:53.777 回答
3

which并且apply在这里很有帮助。

> 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这里使用转置()函数,有人可以帮我吗?

于 2013-01-22T22:15:50.907 回答