对于我的数据帧的每一行,我目前正在尝试选择所有重复的值等于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
我找到了有关如何消除重复行或列的信息,但我真的不知道如何继续这里...非常感谢您的帮助
答案 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)
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
)功能,任何人都可以帮助我吗?
答案 2 :(得分:3)
duplicated
可以通过这种方式与apply
:
dat <- t(apply(dat, 1, function(x) {x[duplicated(x) & x == 4] <- NA ; x}))