【问题标题】:How can I access columns by name in an anonymous data frame object for filtering in R?如何按名称访问匿名数据框对象中的列以在 R 中进行过滤?
【发布时间】:2016-02-27 18:34:21
【问题描述】:

我有这个单行:

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 条目

有什么想法吗?

【问题讨论】:

  • mpg 是什么对象?我得到 "> 聚合(.~gear,mtcars[mtcars$mpg>20,c('gear','mpg')],mean)[mpg>25,] [.data.frame(aggregate(.~gear, mtcars[mtcars$mpg > 20, c("gear", : object 'mpg' not found" 。你的代码中有attach()吗?

标签: r aggregate aggregate-functions having having-clause


【解决方案1】:

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

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)
    

    【讨论】:

      【解决方案3】:

      你不能(而且我没有得到很多NAs,我正确得到了一个错误,因为没有找到mpg。你以前做过什么允许@ 987654323@ 找到了吗?)。 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
      

      【讨论】:

        猜你喜欢
        • 2022-10-17
        • 2016-07-28
        • 1970-01-01
        • 2019-01-10
        • 2020-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多