我对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)
答案 0 :(得分:1)
根据aggregate
的帮助,na.action = na.omit
是公式对象方法的默认值,但不是数据框的方法。使用哪种方法取决于函数调用中第一个参数的类。
我没有您的数据,所以我向您展示了这意味着使用R中包含的数据集mtcars
进行修改(这是必需的,因为mtcars
不包含NA
):
mtcars[5,"disp"]<-NA
现在,我按disp
汇总了mpg
和cyl
列。首先,我使用数据框方法:
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
值。