繁体   English   中英

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

[英]removing specific rows from a data frame within a loop in r

每次迭代后,如何保存循环中数据框中发生的更改? 通过以下代码,我想从数据帧(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,]
  }

}

更惯用的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,]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM