A:如何使用aggregate()而不删除带有na的行


您可以使用 R 中的Aggregate()函数来计算数据框中变量的汇总统计量。

默认情况下,如果Aggregate()函数在数据框中遇到具有一个或多个 NA 值的行,它会在执行计算时简单地删除该行。

这可能会在执行计算时导致意外的后果。

为了避免这种行为,您可以在Aggregate()函数中使用na.action=NULL参数。

下面的例子展示了如何在实践中使用这个参数。

示例:在 R 中使用aggegate(),并且不要删除带有 NA 的行

假设我们在 R 中有以下数据框,显示来自不同球队的篮球运动员的得分和助攻:

 #create data frame
df <- data. frame (team=c('A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'),
                 points=c(5, 9, 12, 14, 14, 13, 10, 6, 15, 18),
                 assists=c(NA, 4, 4, 5, 3, 6, 8, 4, 10, NA))

#view data frame
df

   team points assists
1 to 5 NA
2 to 9 4
3 to 12 4
4 to 14 5
5 A 14 3
6 B 13 6
7 B 10 8
8 B 6 4
9 C 15 10
10 C 18 NA

现在假设我们尝试使用Aggregate()函数来计算按球队分组的得分助攻总和

 #attempt to calculate sum of points and assists, grouped by team
aggregate(. ~ team, data=df, FUN=sum, na. rm = TRUE )

  team points assists
1 A 49 16
2 B 29 18
3 C 15 10

结果似乎向我们显示了每支球队的得分和助攻总和,但在运行这些计算时,具有 NA 值的行实际上被删除了。

我们可以通过查看原始数据框并看到C 队积分栏中有两个值来确认这一点:

  • 15
  • 18

所以,C队总共应该得到33分,但结果只显示15分。

这是因为得分值为 18 的行在助攻列中的值为 NA,这意味着在计算球队与球队的得分总和时实际上并未使用该行。

为了确保执行计算时不删除具有 NA 值的行,我们需要使用na.action=NULL参数,如下所示:

 #calculate sum of points and assists, grouped by team (don't drop NA rows)
aggregate(. ~ team, data=df, FUN=sum, na. rm = TRUE , na. action =NULL)

  team points assists
1 A 54 16
2 B 29 18
3 C 33 10

请注意, Aggregate()函数这次正确返回 C 队的分值总和等于 33。

注意na.rm=TRUE参数指定在特定列中执行计算时应忽略NA 值。

其他资源

以下教程解释了如何在 R 中执行其他常见任务:

如何在R中使用summary()函数
如何计算R中每组的平均值
如何在 R 中计算描述性统计

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注