如果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+ 次查看

启动您的 职业生涯

通过完成课程获得认证

立即开始
广告