raggregate函数na仍然输出为na.动作设置为省略

  • 本文关键字:na 设置 输出 函数 raggregate
  • 更新时间 :
  • 英文 :


我对r很陌生,所以我现在有点困惑。

我在一个列表上使用聚合函数,现在它正确地生成所有值,除了那些包含NA的列。我在计算均值。

所讨论的数据如下

  AreaSize constructionYear
6        30             1980
7        30               NA
13       30             1969

现在聚合表给出了这个。

  SegGroup listPrice   rent livingArea constructionYear soldPrice
1       20   2383750 1353.0   25.87500           1927.5   2813750
2       30   2161667 1856.0   36.50000               NA   2428333
3       40   3548333 2381.0   44.16667               NA   3858333
4       50   2261667 3601.0   56.66667               NA   2616667
5       60   2395000 3320.0   63.00000           1954.0   2700000
6       70   3837500 3274.0   72.50000           1946.5   3942500
7       80   3335000 4759.5   82.75000           1986.0   3400000
8       90   2720000 4017.5   92.50000           1950.0   3475000

即使na。动作= na。省略聚合函数(默认设置)。怎么了?

代码
listPrice  <- aggregate(lOriginal[-length(lOriginal)], list(lOriginal$AreaSize), FUN = mean)

根据aggregate的帮助,na.action = na.omit是公式对象方法中的默认值,而不是数据帧方法中的默认值。使用哪个方法由函数调用中第一个参数的类决定。

我没有你的数据,所以我用数据集mtcars向你展示这意味着什么,它包含在R中,经过修改(这是需要的,因为mtcars不包含NA):

mtcars[5, "disp"] <- NA

现在,我通过cyl聚合dispmpg列。首先,我使用数据帧方法:

aggregate(mtcars[, c("mpg", "disp")], list(cyl = mtcars$cyl), mean)
##   cyl      mpg     disp
## 1   4 26.66364 105.1364
## 2   6 19.74286 183.3143
## 3   8 15.10000       NA

显然,NA的值没有被省略。然而,mean()带有一个参数na.rm,我可以将其设置为TRUE,如下所示:

aggregate(mtcars[, c("mpg","disp")], list(cyl = mtcars$cyl), mean, na.rm = TRUE)
##   cyl      mpg     disp
## 1   4 26.66364 105.1364
## 2   6 19.74286 183.3143
## 3   8 15.10000 352.5692

(这个工作的原因也可以在aggregate()的文档中找到。该函数有一个参数...(与许多R函数一样),它将匹配您传递给该函数的所有不匹配其参数的表达式。然后将这些表达式传递给用于聚合的函数。由于aggregate()没有名为na.rm的参数,因此该参数将被发送给mean()

现在回到引起您困惑的原因:您也可以通过将公式作为第一个参数来使用聚合(我发现更可读,因此更可取)。调用的内容如下:

aggregate(cbind(mpg, disp) ~ cyl, data = mtcars, mean)
##   cyl      mpg     disp
## 1   4 26.66364 105.1364
## 2   6 19.74286 183.3143
## 3   8 14.82308 352.5692

可以看到,在这种形式下,NA值在默认情况下确实被省略了。

最新更新