如何使用矢量化而不是循环优化我的R代码以消除数据帧中的相邻重复行
编辑问题: 我的数据框看起来像这样如何使用矢量化而不是循环优化我的R代码以消除数据帧中的相邻重复行,r,optimization,dataframe,R,Optimization,Dataframe,编辑问题: 我的数据框看起来像这样 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
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>
x1 x2 x3 x4
1 a b <NA> a
2 c <NA> d e
3 f g h i
4 j k <NA> <NA>
x1删除行中任何位置的重复项
df[t(apply(df,1,duplicated))]<-NA
df[t(应用(df,1,重复))]删除行中任何位置的重复项
df[t(apply(df,1,duplicated))]<-NA
df[t(apply(df,1,duplicated))]当您面临需要逐行解决的问题时,解决方案通常是非矢量化的(正如您在提供的两个答案中所看到的),这仅仅是因为R设计用于处理向量,而不是行。如果您真的对矢量化解决方案感到失望,请查看Rcpp
软件包,该软件包允许您在遇到需要逐行解决的问题时使用C++编写矢量化函数,该解决方案通常是非矢量化的(正如您在提供的两个答案中所看到的),因为R设计用于处理矢量,没有排。如果您真的对矢量化解决方案感到失望,请查看Rcpp
包,该包允许您使用C++编写矢量化函数对不起,我的问题不准确。我要做的是只对相邻的重复条目进行elmininate。我需要编辑我的问题。@RamiAl Fahham,我编辑了我的答案,我希望它现在符合您的标准。对不起,我的问题不准确。我要做的是只对相邻的重复条目进行elmininate。我需要编辑我的问题。@RamiAl Fahham,我编辑了我的答案,我希望它现在符合您的标准。
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)
}))