如何从包含不同位置的N数据框中删除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
热门推荐
10 病人祝福语老师寄语简短
11 新娘生孩子祝福语简短
12 婆婆66岁祝福语简短
13 今天孩子高考祝福语简短
14 送彩票生日祝福语简短
15 分别祝福语简短情话英文
16 画室揭牌仪式祝福语简短
17 女友妈妈生日祝福语简短
18 离别赠言离职祝福语简短