遍历R中的所有行,删除符合条件的行

编程入门 行业动态 更新时间:2024-10-07 12:18:58
本文介绍了遍历R中的所有行,删除符合条件的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

R数据框。它大约有十几列和150行左右。在以下两种情况下,我希望遍历每一行并将其删除

  • 第8列的值未定义
  • 第8列中其上一行的值已定义。
  • 我的代码看起来是这样的,但它总是崩溃。这一定是个愚蠢的错误,但我想不出来。

    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中的所有行,删除符合条件的行

    本文发布于:2023-11-30 12:40:36,感谢您对本站的认可!
    本文链接:https://www.elefans.com/category/jswz/34/1650000.html
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:遍历   符合条件

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!