2016-02-27 71 views
0

我這有一個班輪:如何在匿名數據框對象中按名稱訪問列以在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,] 

但現在我得到一些1743線NA

有什麼想法?

+1

什麼對象是'mpg'的解決方案?我得到了>> aggregate(。〜gear,mtcars [mtcars $ mpg> 20,c('gear','mpg')],mean)[mpg> 25,] 錯誤'[.data.frame' (。〜gear,mtcars [mtcars $ mpg> 20,c(「gear」,: object'mpg'not found。)你有代碼中的任何'attach()'嗎? – jogo

回答

2

下面是基函數另一種解決方案:

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] 
2

一個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) 
2

你不能(和我沒有得到很多NA S,我正確得到一個錯誤因爲找不到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