聚合函数 - NA仍然输出为na.action设置为省略

时间:2015-07-20 16:39:28

标签: r

我对R.很新。所以我现在有点困惑。

我在列表中使用聚合函数,现在它正确地生成所有值,除了那些包含NA&#39s的列。我正在计算平均值。

有问题的数据在

之下
  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.action = na.omit在聚合函数中(默认设置)。怎么了?

代码

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

1 个答案:

答案 0 :(得分:1)

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

我没有您的数据,所以我向您展示了这意味着使用R中包含的数据集mtcars进行修改(这是必需的,因为mtcars不包含NA):

mtcars[5,"disp"]<-NA

现在,我按disp汇总了mpgcyl列。首先,我使用数据框方法:

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的参数,因此该参数将被发送到{ {1}}。)

现在回到导致你混淆的原因:你也可以通过给出一个公式作为第一个参数来使用聚合(我发现它更具可读性,因此更可取)。该呼叫如下:

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 值。