【问题标题】:R: selecting rows that contain a given number of NAsR:选择包含给定数量 NA 的行
【发布时间】:2013-09-03 17:30:15
【问题描述】:

我有一个带有 NA 的六列数据框。我希望只选择那些包含最多三个 NA 的行。 我可以使用 sum(is.na(my.df[,c(1:6)])), 找到 NA 的数量,但无法使用“子集”或任何其他函数和条件 sum(is.na(log.df[,c(1:6)])) <=3 选择数据帧的子集 最终我希望计算每个选定行的中位数。示例数据如下所示:

C1  C2  C3  C4  C5  C6
6.4 NA 6.1 6.2 NA NA
7.1 6.4 6.5 5.9 7 6.9
7.1 7 6.9 6.9 6.9 7
6.9 NA 6.9 NA 7.1 NA
6.8 NA 7.1 7.1 6.8 7.2
NA NA NA NA NA 6.4
NA NA NA NA NA 6.7

提前致谢

【问题讨论】:

    标签: r


    【解决方案1】:

    使用rowSums:

    > mydf[rowSums(is.na(mydf)) <= 3, ]
       C1  C2  C3  C4  C5  C6
    1 6.4  NA 6.1 6.2  NA  NA
    2 7.1 6.4 6.5 5.9 7.0 6.9
    3 7.1 7.0 6.9 6.9 6.9 7.0
    4 6.9  NA 6.9  NA 7.1  NA
    5 6.8  NA 7.1 7.1 6.8 7.2
    

    一步一步:

    • 每行有多少个NAs?

      > rowSums(is.na(mydf))
      [1] 3 0 0 3 1 5 5
      
    • 其中有多少个小于或等于 3?

      > rowSums(is.na(mydf)) <= 3
      [1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE
      

    而且,R 可以使用它来进行子集化。它将保留TRUE 行(1、2、3、4、5)并丢弃FALSE 行(6、7)。

    【讨论】:

    • 感谢您的解释
    猜你喜欢
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 2015-10-17
    • 2012-10-12
    • 2021-12-15
    相关资源
    最近更新 更多