Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用矢量化而不是循环优化我的R代码以消除数据帧中的相邻重复行_R_Optimization_Dataframe - Fatal编程技术网

如何使用矢量化而不是循环优化我的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)
                   }))