如何从一个 R 数据帧中移除 NA,这些数据帧中的 NA 位于不同的位置?
如果 NA 值位于 R 数据帧的不同位置,则无法在基本 R 中轻松删除它们,我们需要一个包来完成这一操作。 解决此问题最好的包是 dplyr,我们可以将 dplyr 的 summarise_each 函数与 na.omit 结合使用,以删除所有 NA。 但是,如果数据帧中有多列,则所有列中的非 NA 值的数量必须相同。
示例
考虑以下数据帧
> x1<-rep(c(NA,2,3),times=c(7,10,3)) > x2<-rep(c(15,NA,24,NA,18),times=c(5,2,5,5,3)) > df1<-data.frame(x1,x2) > df1
输出
x1 x2 1 NA 15 2 NA 15 3 NA 15 4 NA 15 5 NA 15 6 NA NA 7 NA NA 8 2 24 9 2 24 10 2 24 11 2 24 12 2 24 13 2 NA 14 2 NA 15 2 NA 16 2 NA 17 2 NA 18 3 18 19 3 18 20 3 18
载入 dplyr 包并从 df1 中移除 NA
示例
> library(dplyr) > df1%>%summarise_each(funs(na.omit(.)))
输出
x1 x2 1 2 15 2 2 15 3 2 15 4 2 15 5 2 15 6 2 24 7 2 24 8 2 24 9 2 24 10 2 24 11 3 18 12 3 18 13 3 18
我们来看另一个示例
示例
> y1<-rep(c(545,NA,524,NA,589,NA,537,NA,541,NA),times=c(2,2,2,2,2,2,2,2,2,2)) > y2<-rep(c(NA,2.1,NA,1.7,NA),times=c(4,4,4,6,2)) > df2<-data.frame(y1,y2) > df2
输出
y1 y2 1 545 NA 2 545 NA 3 NA NA 4 NA NA 5 524 2.1 6 524 2.1 7 NA 2.1 8 NA 2.1 9 589 NA 10 589 NA 11 NA NA 12 NA NA 13 537 1.7 14 537 1.7 15 NA 1.7 16 NA 1.7 17 541 1.7 18 541 1.7 19 NA NA 20 NA NA
从 df2 中移除 NA
> df2%>%summarise_each(funs(na.omit(.)))
输出
y1 y2 1 545 2.1 2 545 2.1 3 524 2.1 4 524 2.1 5 589 1.7 6 589 1.7 7 537 1.7 8 537 1.7 9 541 1.7 10 541 1.7
广告