4

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

提前致谢

4

1 回答 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

一步步:

  • NA每行多少个s?

    > 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)。

于 2013-09-03T17:32:33.477 回答