如果数据框中缺少值,则不能将所有值都视为完整情况,我们可能只想提取完整的值。我们可能只想提取特定列的完整案例。因此,我们可以对要子集化的数据帧的列使用is.na的取反。
请看以下数据帧-
set.seed(123) x<-sample(c(0,1,NA),20,replace=TRUE) y<-sample(c(0:2,NA),20,replace=TRUE) z<-sample(c(0:5,NA),20,replace=TRUE) a<-sample(c(7,11,13,NA),20,replace=TRUE) b<-sample(c(51,NA),20,replace=TRUE) c<-sample(c(rnorm(2,1,0.05),NA),20,replace=TRUE) df<-data.frame(x,y,z,a,b,c) df
输出结果
x y z a b c 1 0 NA 0 13 51 0.9985727 2 NA 2 2 7 NA NA 3 1 2 2 11 51 NA 4 NA NA 2 11 NA 0.9985727 5 NA 2 1 NA 51 0.9985727 6 0 2 0 11 51 1.0126659 7 1 2 1 NA NA NA 8 NA 2 3 NA NA 1.0126659 9 1 1 1 NA NA 1.0126659 10 1 0 NA 11 51 NA 11 NA NA 0 NA 51 NA 12 1 NA 3 13 NA 1.0126659 13 NA 2 5 13 51 0.9985727 14 1 NA 0 7 NA NA 15 0 0 3 11 51 0.9985727 16 NA 1 1 7 51 0.9985727 17 0 NA 0 11 NA 0.9985727 18 0 0 5 13 51 1.0126659 19 0 1 NA 11 51 1.0126659 20 NA 0 2 7 NA 1.0126659
用列x的完整情况进行子集-
df[!is.na(df["x"]),]
输出结果
x y z a b c 1 NA 0 13 NA 1.013801 6 1 2 NA 11 NA NA 7 1 1 2 7 NA 1.013801 8 1 0 3 13 51 1.061420 10 0 2 NA 13 NA NA 11 1 NA 4 11 51 NA 12 1 1 2 NA 51 1.013801 13 0 0 5 13 NA 1.013801 14 1 2 0 NA 51 NA 16 0 0 4 11 51 1.061420 19 0 NA NA NA 51 1.013801 20 0 1 4 11 NA 1.013801
以y列的完整情况进行子集-
df[!is.na(df["y"]),]
输出结果
x y z a b c 1 NA 0 4 11 NA 1.013801 2 NA 0 NA 7 51 NA 3 NA 2 0 7 51 1.061420 5 NA 1 1 7 51 1.013801 6 1 2 NA 11 NA NA 7 1 1 2 7 NA 1.013801 8 1 0 3 13 51 1.061420 9 NA 1 4 7 NA NA 10 0 2 NA 13 NA NA 12 1 1 2 NA 51 1.013801 13 0 0 5 13 NA 1.013801 14 1 2 0 NA 51 NA 15 NA 2 1 NA 51 1.061420 16 0 0 4 11 51 1.061420 18 NA 2 3 13 NA 1.013801 20 0 1 4 11 NA 1.013801
用z列的完整情况进行子集-
df[!is.na(df["z"]),]
输出结果
x y z a b c 1 NA 0 4 11 NA 1.013801 3 NA 2 0 7 51 1.061420 4 1 NA 0 13 NA 1.013801 5 NA 1 1 7 51 1.013801 7 1 1 2 7 NA 1.013801 8 1 0 3 13 51 1.061420 9 NA 1 4 7 NA NA 11 1 NA 4 11 51 NA 12 1 1 2 NA 51 1.013801 13 0 0 5 13 NA 1.013801 14 1 2 0 NA 51 NA 15 NA 2 1 NA 51 1.061420 16 0 0 4 11 51 1.061420 17 NA NA 4 11 NA NA 18 NA 2 3 13 NA 1.013801 20 0 1 4 11 NA 1.013801
用a列的完整情况进行子集-
df[!is.na(df["a"]),]
输出结果
x y z a b c 1 NA 0 4 11 NA 1.013801 2 NA 0 NA 7 51 NA 3 NA 2 0 7 51 1.061420 4 1 NA 0 13 NA 1.013801 5 NA 1 1 7 51 1.013801 6 1 2 NA 11 NA NA 7 1 1 2 7 NA 1.013801 8 1 0 3 13 51 1.061420 9 NA 1 4 7 NA NA 10 0 2 NA 13 NA NA 11 1 NA 4 11 51 NA 13 0 0 5 13 NA 1.013801 16 0 0 4 11 51 1.061420 17 NA NA 4 11 NA NA 18 NA 2 3 13 NA 1.013801 20 0 1 4 11 NA 1.013801
用b列的完整情况进行子集-
df[!is.na(df["b"]),]
输出结果
x y z a b c 2 NA 0 NA 7 51 NA 3 NA 2 0 7 51 1.061420 5 NA 1 1 7 51 1.013801 8 1 0 3 13 51 1.061420 11 1 NA 4 11 51 NA 12 1 1 2 NA 51 1.013801 14 1 2 0 NA 51 NA 15 NA 2 1 NA 51 1.061420 16 0 0 4 11 51 1.061420 19 0 NA NA NA 51 1.013801
用c列的完整情况进行子集-
df[!is.na(df["c"]),]
输出结果
x y z a b c 1 NA 0 4 11 NA 1.013801 3 NA 2 0 7 51 1.061420 4 1 NA 0 13 NA 1.013801 5 NA 1 1 7 51 1.013801 7 1 1 2 7 NA 1.013801 8 1 0 3 13 51 1.061420 12 1 1 2 NA 51 1.013801 13 0 0 5 13 NA 1.013801 15 NA 2 1 NA 51 1.061420 16 0 0 4 11 51 1.061420 18 NA 2 3 13 NA 1.013801 19 0 NA NA NA 51 1.013801 20 0 1 4 11 NA 1.013801