如何在 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

更新於: 2021年11月10日

963 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.