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 中执行其他常见任务: