选择包含特定数量NA值的行

4
我有一个包含NA值的六列数据框,我想选择只包含最多三个NA的行。我可以使用sum(is.na(my.df[,c(1:6)]))找到NA的数量,但是无法使用“subset”或其他任何函数来选择数据帧的子集和条件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

感谢您提前阅读。
1个回答

7
使用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

步骤:

  • How many NAs per row?

    > rowSums(is.na(mydf))
    [1] 3 0 0 3 1 5 5
    
  • How many of those are less than or equal to 3?

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

此外,R可以使用这个方法进行子集筛选。它会保留TRUE行(1、2、3、4、5),并且丢弃FALSE行(6、7)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接