Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.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_For Loop_Vectorization - Fatal编程技术网

如果当前行的值与R中的上一行相同,则删除当前行

如果当前行的值与R中的上一行相同,则删除当前行,r,for-loop,vectorization,R,For Loop,Vectorization,作为标题,我起草了以下脚本: set.seed(1) temp <- data.frame(cola=sample(1:10,100,replace=TRUE), stay=TRUE) for (loop in (2:nrow(temp))) { temp[loop,'stay'] <- ifelse(temp[loop,'cola']==temp[loop-1,'cola'],FALSE,TRUE) } temp <- tem

作为标题,我起草了以下脚本:

set.seed(1)
temp <- data.frame(cola=sample(1:10,100,replace=TRUE),
                   stay=TRUE)
for (loop in (2:nrow(temp))) {
  temp[loop,'stay'] <- ifelse(temp[loop,'cola']==temp[loop-1,'cola'],FALSE,TRUE)    
}
temp <- temp[temp[,'stay']==TRUE,]

我不喜欢那里的for循环,我们能以某种方式将其矢量化吗?

在这里,我们可以检查当前行,即temp$cola[-1]是否等于=前一行temp$cola[-nrowtemp],然后将c与FALSE连接,以获得与nrowtemp相同的长度,并将其用作索引来删除行。这也适用于角色

那么:

temp <- temp[c(TRUE, diff(temp$cola) != 0),]
temp <- temp[c(TRUE, diff(temp$cola) != 0),]