编辑问题:
我的数据框看起来像这样。
x1 <- c("a", "c", "f", "j")
x2 <- c("b", "c", "g", "k")
x3 <- c("b", "d", "h", NA)
x4 <- c("a", "e", "i", NA)
df <- data.frame(x1, x2, x3, x4, stringsAsFactors=F)
df
x1 x2 x3 x4
1 a b b a
2 c c d e
3 f g h i
4 j k <NA> <NA>
我写了一个循环来消除每行中的NEIGHBORING重复值。
for ( i in 1:4 ) {
for ( j in 1:3 ) {
if ( df[i, 4-j+1] == df[i, 4-j] & is.na(df[i, 4-j+1]) == F ) {
df[i, 4-j+1] <- NA
} else {
df[i, 4-j+1] <- df[i, 4-j+1]
}
}
}
结果如下所示。
x1 x2 x3 x4
1 a b <NA> a
2 c <NA> d e
3 f g h i
4 j k <NA> <NA>
然而,原始数据帧非常大,因此循环似乎不是一种合适的方法。
你能告诉我如何优化吗?
非常感谢你的帮助,很遗憾没有更准确地询问。
拉米
答案 0 :(得分:4)
删除行上任何位置的重复
df[t(apply(df,1,duplicated))]<-NA
要仅删除相邻的重复项,这应该有效:
df[]<-t(apply(df,1,function(rg){
if(any(duplicated(rg))) {
inddupl<-c(F,rg[2:length(rg)]==rg[1:(length(rg)-1)])
rg[inddupl]<-NA
}
return(rg)
}))