1

我在 Stack Overflow 上找不到已经回答了我的问题的问题,所以很抱歉,如果已经有人问过这个问题而我只是找不到它。

总而言之,这个问题更多是关于根据我使用的代码了解我的数据会发生什么。

所以,我有一个数据集,里面有几个 NA。

我想汇总数据并使用na.rm=True它告诉 R 在计算时忽略 NA,对吗?我收到的输出包括 NA,这导致我将函数na.action=na.passna.rm=True. 这使我的输出中的 NA 明显减少。老实说,我不明白为什么...

由于我喜欢自己尝试并找出答案,因此我查看了聚合函数的不同变体:

  1. 只有na.rm=True
  2. 只有na.action=na.pass
  3. na.rm=True,na.action=na.pass

只使用 2。我得到了很多 NA,这是有道理的,因为我告诉 R 将所有 NA 包括在计算中而不包含na.rm=True在其中。同时 1. 和 3. 不要给我相同的结果。这是为什么?

我认为这两者的na.rm=True意思na.action=na.pass是一样的......显然他们没有,因为我的变量的平均值略有不同。

当我同时使用 na.rm=True 和na.action=na.pass聚合函数时,与仅使用na.rm=True. 哪个更好用?

非常感谢,感谢您的帮助!

4

1 回答 1

0

让我们举一个简单的例子来理解这一点:

df <- data.frame(a = c(2, 2, 1, 3, NA, NA), b = c(1, 1, 1, 2, 2, 3))
df
#   a b
#1  2 1
#2  2 1
#3  1 1
#4  3 2
#5 NA 2
#6 NA 3
  • 与. aggregate_sum
aggregate(a~b, df, sum)

#  b a
#1 1 5
#2 2 3

请注意,输出中没有b = 3行。也b = 2有 1 个NA值,但我们返回 3 的输出而不添加na.rm = TRUE. 这意味着默认情况下NA,计算时会删除所有值。

  • na.action = 'na.pass'.
aggregate(a~b, df, sum, na.action = 'na.pass')

#  b  a
#1 1  5
#2 2 NA
#3 3 NA

通过指定na.action = na.pass,我们要求它包含所有NA值。因此,我们现在有一行,b = 3因为我们没有包括.b = 2NAna.rm = TRUE

  • 使用na.rm = TRUE.
aggregate(a~b, df, sum, na.rm = TRUE, na.action = 'na.pass')

#  b a
#1 1 5
#2 2 3
#3 3 0

我认为这个输出应该是不言自明的。

于 2021-03-18T07:18:44.390 回答