从r中的循环内的数据帧中删除特定行

时间:2014-04-07 11:27:34

标签: r for-loop

如何在每次迭代后保存循环内数据框中发生的更改?通过以下代码,我想从我的数据框(df)中删除一些与'v'具有相同值的行。代码运行良好,但最终问题是,只有迭代中最后一个i值的结果才会影响数据框!

for (i in 1:50){
  v <- i+ 450
      temp<- fn$sqldf("select count(V1) from df where V1='$v' ")
  if (temp[1,] < 1000){ 
    g <- temp[1,]
    c <- v
    print(paste("Topic number: ", c, "is less than 1000, with ", g, "records") )
    new_df<- df[df$V1 != v,]
  }

}

1 个答案:

答案 0 :(得分:1)

更惯用的R方式是:

reduced <- subset(df, V1 > 450 & V1 <= 500)
count <- table(reduced$V1)
V1OK <- as.integer(names(count)[count<1000])
filtered <- subset(reduced, V1 %in% V1OK)

如果你宁愿继续以sql为中心的观点,你的问题似乎是在创建file3时,你需要从新的每次迭代中生成这个(我必须猜测file_new是什么) 。您可以在循环之前为每一行设置一个标志:

V1OK <- rep(FALSE, nrow(DF))

并使用

在循环内更新它
V1OK <- V1OK | df$V1 !=v

在循环之后你可以访问

file_new[V1OK,]