如果两列都包含 R 中的缺失值,如何添加两列?

如果我们想添加 R 数据框的两列,并且每列都包含缺失值,则可以通过以下方式之一添加列 -

  • 如果它们是数字,则添加两个列值。

  • 如果其中一列缺少值,则返回数字。

  • 如果两列都有缺失值,则返回 NA。

为此,我们可以借助 apply 函数和 ifelse 函数,如下面给出的示例所示。

示例 1

以下代码段创建了一个示例数据框 -

x1<-sample(c(NA,1,2),20,replace=TRUE)
x2<-sample(c(NA,5),20,replace=TRUE)
df1<-data.frame(x1,x2)
df1

创建以下数据框 -

    x1 x2
1   1  NA
2   1   5
3   2   5
4   1   5
5   2   5
6  NA  NA
7   2  NA
8   1  NA
9   1   5
10 NA  NA
11  1  NA
12  2  NA
13 NA  NA
14 NA  NA
15  1  NA
16  1   5
17 NA  NA
18  1  NA
19  2  NA
20 NA   5

要添加 df1 的列,请将以下代码添加到上述代码段中 -

x1<-sample(c(NA,1,2),20,replace=TRUE)
x2<-sample(c(NA,5),20,replace=TRUE)
df1<-data.frame(x1,x2)
df1$Sum<-apply(cbind(df1$x1,df1$x2),1,function(x) ifelse(all(is.na(x)),NA,sum(x,na.rm=T)))
df1
输出结果

如果您将上述所有给定的代码片段作为单个程序执行,它会生成以下输出: -

    x1  x2 Sum
1   1  NA   1
2   1   5   6
3   2   5   7
4   1   5   6
5   2   5   7
6  NA  NA  NA
7   2  NA   2
8   1  NA   1
9   1   5   6
10 NA  NA  NA
11  1  NA   1
12  2  NA   2
13 NA  NA  NA
14 NA  NA  NA
15  1  NA   1
16  1   5   6
17 NA  NA  NA
18  1  NA   1
19  2  NA   2
20 NA   5   5

示例 2

以下代码段创建了一个示例数据框 -

y1<-sample(c(NA,rnorm(2)),20,replace=TRUE)
y2<-sample(c(NA,rnorm(2)),20,replace=TRUE)
df2<-data.frame(y1,y2)
df2

创建以下数据框 -

      y1              y2
1   0.5109281     -0.6697566
2   NA            -0.1898259
3   NA            -0.1898259
4  -0.9540862     -0.6697566
5   NA            -0.1898259
6   NA            -0.1898259
7   NA             NA
8   0.5109281     -0.6697566
9   NA             NA
10  0.5109281      NA
11  0.5109281     -0.6697566
12 -0.9540862      NA
13 -0.9540862     -0.6697566
14  NA            -0.1898259
15  0.5109281     -0.1898259
16  NA            -0.1898259
17  0.5109281      NA
18  NA            -0.6697566
19  NA            -0.1898259
20  NA             NA

要添加 df2 的列,请将以下代码添加到上述代码段中 -

y1<-sample(c(NA,rnorm(2)),20,replace=TRUE)
y2<-sample(c(NA,rnorm(2)),20,replace=TRUE)
df2<-data.frame(y1,y2)
df2$Sum<-apply(cbind(df2$y1,df2$y2),1,function(x) ifelse(all(is.na(x)),NA,sum(x,na.rm=T)))
df2
输出结果

如果您将上述所有给定的代码片段作为单个程序执行,它会生成以下输出: -

       y1             y2          Sum
1   0.5109281      -0.6697566  -0.1588286
2   NA             -0.1898259  -0.1898259
3   NA             -0.1898259  -0.1898259
4  -0.9540862      -0.6697566  -1.6238429
5   NA             -0.1898259  -0.1898259
6   NA             -0.1898259  -0.1898259
7   NA              NA          NA
8   0.5109281      -0.6697566  -0.1588286
9   NA              NA          NA
10  0.5109281       NA          0.5109281
11  0.5109281      -0.6697566  -0.1588286
12 -0.9540862       NA         -0.9540862
13 -0.9540862      -0.6697566  -1.6238429
14  NA             -0.1898259  -0.1898259
15  0.5109281      -0.1898259   0.3211022
16  NA             -0.1898259  -0.1898259
17  0.5109281       NA          0.5109281
18  NA             -0.6697566  -0.6697566
19  NA             -0.1898259  -0.1898259
20  NA              NA          NA