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

时间:2014-12-12 03:35:31

标签: 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 <- temp[temp[,'stay']==TRUE,]

我不喜欢那里的for-loop,我们能以某种方式对其进行矢量化吗?

2 个答案:

答案 0 :(得分:0)

在这里,我们可以检查current row是否。 temp$cola[-1]与上一行==相等(temp$cola[-nrow(temp)]),然后与c连接(FALSE)以获得与nrow(temp)相同的长度并使用它作为删除行的索引。这也适用于characters

indx <- with(temp, c(FALSE,cola[-1]==cola[-nrow(temp)]))
temp[!indx,]

答案 1 :(得分:0)

怎么样:

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