我有一个带有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
Run Code Online (Sandbox Code Playgroud)
提前致谢
用途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
Run Code Online (Sandbox Code Playgroud)
一步步:
有多少NA每部列S?
> rowSums(is.na(mydf))
[1] 3 0 0 3 1 5 5
Run Code Online (Sandbox Code Playgroud)其中有多少小于或等于3?
> rowSums(is.na(mydf)) <= 3
[1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)并且,R可以将其用于子集.它将保留TRUE行(1,2,3,4,5)并丢弃FALSE那些行(6,7).