如何按名称访问匿名数据框对象中的列以在 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]
我有这个单线:
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]