本文介绍了遍历R中的所有行,删除符合条件的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
第8列的值未定义
第8列中其上一行的值已定义。
R数据框。它大约有十几列和150行左右。在以下两种情况下,我希望遍历每一行并将其删除
我的代码看起来是这样的,但它总是崩溃。这一定是个愚蠢的错误,但我想不出来。
for (i in 2:nrow(newfile)){ if (is.na(newfile[i,8]) && !is.na(newfile[(i-1),8]){ newfile<-newfile[-i,] } }显然在本例中,newfile就是我的数据帧。
我收到的错误
[.data.frame(newfile,-i,)中的错误:找不到对象‘i’
问题解决了,但有些测试数据,如果你们想胡闹的话:
23 L8 29141078 744319 27165443 24 L8 27165443 NA NA 25 L8 28357836 8293 25116398 26 L8 25116398 NA NA 27 L8 28357836 21600 25116398 28 L8 25116398 NA NA 29 L8 40929564 NA NA 30 L8 40929564 NA NA 31 L8 41917264 33234 39446503 32 L8 39446503 NA NA 33 L8 41917264 33981 39446503 34 L8 39446503 NA NA显然这里做了一些修改,所以现在您正在将第4列与其上一列进行比较(或者您也可以使用第5列,无论哪种方式)
推荐答案问题是您正在从自己的下面更改数据框;nrow(newfile)的原始计算不会随着您的操作而更新(如果您有一个C样式的循环for (i=1; i<=nrow(newfile); i++)...)。另一方面,在while循环中,每次通过循环都会重新计算条件,所以我认为这是可行的。
i <- 2 while (i<=nrow(newfile)){ if (is.na(newfile[i,8]) && !is.na(newfile[i-1,8])) { newfile<-newfile[-i,] } i <- i+1 }您没有给我们一个容易重现的答案(即带有答案的测试数据集),所以我现在不打算测试它。
仔细考虑(我现在没有时间给出这一点)可能会导致一种非迭代(因此,如果这很重要,可能会快得多)的方式来完成这项工作。
更多推荐
遍历R中的所有行,删除符合条件的行
发布评论