2014-04-07 61 views
0

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

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,] 
    } 

} 
+0

这如果我们手边有一个可重复的例子,它会更好地工作。 http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

回答

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为中心的思维继续,您的问题似乎是在创建文件3的,你从新的每次迭代生成这个(我必须猜测什么是file_new)。你可以为每一行标志设置循环之前:

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

V1OK <- V1OK | df$V1 !=v 

内环路更新和循环之后,你就可以访问

file_new[V1OK,] 
+0

感谢您的回答。对不起,我忘了用df更改file_new,这实际上是我的数据框的名称。我试过你的第一个解决方案,它给了我想从我的df中删除的数据。但是,如何将数据帧(df)与除过滤数据的其他数据相混淆呢? – MASUMEH

+0

如果我给你的是与你想要的逻辑相反的东西,你可以试试'df [!V1OK,]'? –

+0

这给了我一个有0个对象的数据框!有没有类似%的%表示'不包含',那么我可以在子语句中使用它? {过滤的< - 子集(减少的,V1 {?} V1OK) – MASUMEH