如果R資料框中存在NA,如何查詢行和?


如果R資料框中存在NA,要查詢行和,我們可以使用rowSums函式並將na.rm引數設定為TRUE,此引數將在計算行和之前刪除NA值。

例如,如果我們有一個名為df的資料框,其中包含一些NA值,那麼我們可以使用以下命令查詢行和:

df$Row_Sums<-rowSums(df,na.rm=TRUE)

示例 1

以下程式碼片段建立了一個示例資料框:

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

建立了以下資料框

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

要在上面建立的資料框上忽略NA值的情況下,為df1中的每一行查詢行和,請將以下程式碼新增到上述程式碼片段中:

x1<-sample(c(NA,2,5),20,replace=TRUE)
x2<-sample(c(NA,2,5),20,replace=TRUE)
x3<-sample(c(NA,2,5),20,replace=TRUE)
df1<-data.frame(x1,x2,x3)
df1$Row_Sums<-rowSums(df1,na.rm=TRUE)
df1

輸出

如果您將上述所有程式碼片段作為單個程式執行,它將生成以下輸出:

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

示例 2

以下程式碼片段建立了一個示例資料框:

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

建立了以下資料框

      y1    y2    y3
1  -0.27    NA    NA
2  -0.27    NA -0.70
3  -0.33    NA -0.06
4  -0.27 -1.35 -0.09
5   0.23 -2.03 -0.09
6     NA -2.03 -0.70
7  -0.27    NA    NA
8  -0.27 -2.03 -0.09
9  -0.27    NA -0.06
10 -0.33    NA -0.70
11 -0.27    NA -0.70
12    NA    NA    NA
13 -0.33    NA    NA
14    NA -1.35 -0.70
15    NA -0.93 -0.06
16  0.23 -1.35 -0.06
17  0.23 -0.93 -0.06
18 -0.27 -0.93 -0.06
19 -0.33    NA -0.06
20    NA -0.93 -0.09

要在上面建立的資料框上忽略NA值的情況下,為df2中的每一行查詢行和,請將以下程式碼新增到上述程式碼片段中:

y1<-sample(c(NA,round(rnorm(3),2)),20,replace=TRUE)
y2<-sample(c(NA,round(rnorm(3),2)),20,replace=TRUE)
y3<-sample(c(NA,round(rnorm(3),2)),20,replace=TRUE)
df2<-data.frame(y1,y2,y3)
df2$Row_Sums<-rowSums(df2,na.rm=TRUE)
df2

輸出

如果您將上述所有程式碼片段作為單個程式執行,它將生成以下輸出:

        y1    y2    y3 Row_Sums
1    -0.27    NA    NA -0.27
2    -0.27    NA -0.70 -0.97
3    -0.33    NA -0.06 -0.39
4    -0.27 -1.35 -0.09 -1.71
5     0.23 -2.03 -0.09 -1.89
6       NA -2.03 -0.70 -2.73
7    -0.27    NA    NA -0.27
8    -0.27 -2.03 -0.09 -2.39
9    -0.27    NA -0.06 -0.33
10   -0.33    NA -0.70 -1.03
11   -0.27    NA -0.70 -0.97
12      NA    NA    NA  0.00
13   -0.33    NA    NA -0.33
14      NA -1.35 -0.70 -2.05
15      NA -0.93 -0.06 -0.99
16    0.23 -1.35 -0.06 -1.18
17    0.23 -0.93 -0.06 -0.76
18   -0.27 -0.93 -0.06 -1.26
19   -0.33    NA -0.06 -0.39
20      NA -0.93 -0.09 -1.02

更新時間: 2021年11月3日

4K+ 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.