如何创建具有特定列完整案例的R数据帧的子集?

如果数据框中缺少值,则不能将所有值都视为完整情况,我们可能只想提取完整的值。我们可能只想提取特定列的完整案例。因此,我们可以对要子集化的数据帧的列使用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