未能省略包含 NA 值的列:na.rm=TRUE 和 na.action=NULL
Posted
技术标签:
【中文标题】未能省略包含 NA 值的列:na.rm=TRUE 和 na.action=NULL【英文标题】:failed to omit Columns containing NA values with: na.rm=TRUE and na.action=NULL 【发布时间】:2019-09-07 03:15:42 【问题描述】:我想获得与以下内容相同的输出:https://www.r-bloggers.com/how-to-aggregate-data-in-r/
我的输出是:
Group.1 Group.2 Name Role Shift Salary Age
1 Cook Dinner NA NA NA 1800 25.0
2 Manager Dinner NA NA NA 2000 41.0
3 Server Dinner NA NA NA 1650 27.5
4 Cook Lunch NA NA NA 1200 24.0
5 Manager Lunch NA NA NA 2200 32.0
6 Server Lunch NA NA NA 1350 24.0
列包含NA
s。包括"na.rm=TRUE"
和"na.action=NULL"
没有任何区别。
我也不断收到警告:
警告信息: 1:在 mean.default(X[[i]], ...) 中: 参数不是数字或逻辑:返回 NA
如何修改aggregate()
,使其省略不必要的列和\或NA
值,而不必求助于dplyr
?
谢谢
agg = aggregate(data,
by = list(data$Role, data$Shift),
FUN = mean, na.rm=TRUE, na.action=NULL)
【问题讨论】:
【参考方案1】:让我们看看你的aggregate
电话
aggregate(data, by = list(data$Role, data$Shift), FUN = mean)
在这里,您正在计算data
的所有 列中的平均值,data$Role
和 data$Shift
(它们是您的分组变量)。
错误很明显,告诉您您正在尝试计算非数字条目的平均值。 data$Name
、data$Role
和 data$Shift
都是非数字列。
我假设你在追求
aggregate(. ~ Role + Shift, data = data[, -1], FUN = mean)
# Role Shift Salary Age
#1 Cook Dinner 1800 25.0
#2 Manager Dinner 2000 41.0
#3 Server Dinner 1650 27.5
#4 Cook Lunch 1200 24.0
#5 Manager Lunch 2200 32.0
#6 Server Lunch 1350 24.0
这里的.
(点)表示所有变量除了~
(波浪号)RHS 上的变量。请注意我们如何排除 data$Name
,将data[, -1]
作为data
参数传递给aggregate
。
或使用by
语法
aggregate(data[, c("Salary", "Age")], by = list(data$Role, data$Shift), FUN = "mean")
这里的x
参数指的是您要根据by
中定义的组聚合其值的所有列。
针对您的评论,仅按Role
汇总
aggregate(cbind(Salary, Age) ~ Role, data = data[, -1], FUN = mean)
# Role Salary Age
#1 Cook 1500 24.50
#2 Manager 2100 36.50
#3 Server 1500 25.75
【讨论】:
@RonakShah 同意,或者aggregate(cbind(Salary, Age)~Role + Shift,data, mean)
我得到的输出与该网站中的“> 数据”相同。 with: ```` > agg = aggregate(data, by = list(data$Role), FUN = mean) ```` 使用上面的代码,我也应该收到相同的输出,这将没有任何列与 NAs
@analytics-josh 是的,以上分析基于相同的数据。
1 Cook 1500.0 24.5 2 Manager 2100.0 36.5 3 Server 1500.0 25.8 这是我所追求的输出(参考上面的链接)
@analytics-josh 所以您只想按data$Role
聚合?为什么你在最初的尝试中包含data$Shift
?无论哪种方式,我都进行了编辑,以向您展示如何通过 Role
聚合 Salary
和 Age
。以上是关于未能省略包含 NA 值的列:na.rm=TRUE 和 na.action=NULL的主要内容,如果未能解决你的问题,请参考以下文章