如何按名称访问匿名数据框对象中的列以在 R 中进行过滤?

How can I access columns by name in an anonymous data frame object for filtering in R?

我有这个单线:

aggregate(. ~ gear,mtcars[mtcars$mpg>20,c('gear','mpg')],mean)

现在我想像他一样按 mpg>25 过滤:

aggregate(. ~ gear,mtcars[mtcars$mpg>20,c('gear','mpg')],mean)[mpg>25,]

但现在我得到了一些 NA 条目的 1743 行

有什么想法吗?

一个dplyr解决方案可以是:

 mtcars %>% group_by(gear) %>% filter(mpg>25) %>% summarise(mean(mpg))

或者更确切地说:

mtcars %>% group_by(gear) %>% filter(mpg>20) %>% 
summarise(mean(mpg)) %>% filter(`mean(mpg)`>25)

你不能(而且我没有得到很多 NA,我 正确地 得到一个错误,因为找不到 mpg . 你之前有没有做过什么让 mpg 被发现的事情?)。 R 无法按照您试图强制执行的方式工作。

你需要

tmp <- aggregate(. ~ gear,
                 data = subset(mtcars, mpg > 20, select = c('gear','mpg')),
                 FUN = mean)
with(tmp, tmp[mpg > 25, ])

> with(tmp, tmp[mpg > 25, ])
  gear   mpg
2    4 25.74
3    5 28.20

这是另一个具有基本功能的解决方案:

subset(aggregate(. ~ gear,mtcars[mtcars$mpg>20,c('gear','mpg')],mean), mpg>25)

这里是 data.table

的解决方案
library(data.table)
M <- data.table(mtcars)
M[mpg>20, .(mpg=mean(mpg)), by=gear][mpg>25]