我觉得我以前做过这件事,不知道为什么我突然不弄清楚。我只是尝试使用aggregate()函数聚合数据,而不删除分组项为NA的任何行。我也不想担心将NA转换为字符串之类的东西。鉴于以下情况:
FOO_BAR <- data.frame(Foo=c(rep("omg", 6), rep(NA, 6), rep("omg", 6), rep(NA, 6)),
Bar=c(rep("This", 6), rep("is", 6), rep("so", 6), rep("annoying", 6)),
Doh=rnorm(24))
我想使用以下内容:
aggregate(data=FOO_BAR, Doh ~ ., FUN=sum, na.action=na.pass, na.rm=FALSE)
产生类似这样的结果:
| 富|酒吧|多赫|
| --------------|--------------|--------------|
| OMG|这个|###|
| 不适用|是|###|
| OMG|所以|###|
| 不适用|烦人|###|
我尝试了na.action=na.pass和na.action=NULL。我试过使用变量“Foo”的类。我想使用aggregate()来解决它,而不是另一种方法,如summarize()。任何帮助感激不尽。
2条答案
按热度按时间uxhixvfz1#
您的问题不在于
aggregate
,而在于factor
的默认行为,它不包括NA
:aggregate
将您的by组强制转换为factors。?factor
显示默认值为exclude = NA
。如果FOO_BAR$Bar
也有NA
,则需要执行相同的操作来包含它。输出
可以看出
Bar
已转换为因子。默认情况下,因子是按字母顺序排列的,这就是为什么annoying
排在第一位,This
排在最后,所以不幸的是Bar
读起来并不像你想的那样:)当然,我们可以修复这种行为--我们不希望您的消息丢失。我们可以使用
forcast::fct_inorder
,而不是手动设置factor
的level
参数:或者,您可以简单地执行以下操作:
wnrlj8wa2#
您可以像下面这样尝试
data.table