代码之家  ›  专栏  ›  技术社区  ›  medavis6

dplyr:group\u by&mutate变量不能调用mean/sd函数

  •  2
  • medavis6  · 技术社区  · 7 年前

    组百分比 dplyr . 但是,我遇到了一个问题,新的计算变量显示为数字,甚至在使用 summary() ,但不允许我打电话 mean() sd() 不会抛出以下错误:

    Warning message:
    In mean.default(., group_pct) :
      argument is not numeric or logical: returning NA 
    

    data(mtcars)
    
    mtcars %>% 
      group_by(cyl) %>% 
      mutate(group_pct = hp / sum(hp)) %>% 
      summary()
    

    enter image description here

    注意:通过调用时,组\u pct计算正确 摘要()

    data(mtcars)
    
    mtcars %>% 
      group_by(cyl) %>% 
      mutate(group_pct = hp / sum(hp)) %>% 
      mean(group_pct)
    

    enter image description here

    ungroup() 和/或 na.rm = TRUE ,功能仍然不起作用。我不明白这里有什么问题。


    编辑:为了澄清,我希望这样做。。。

    mtcars %>% 
      group_by(cyl) %>% 
      mutate(group_pct = hp / sum(hp)) %>% 
      paste0('Words: ', mean(group_pct))
    

    希望最终的结果是:

    Words: 0.09375
    

    summarize() 因为,所以我从一开始就不把它包括在内。很抱歉给您带来不便。

    4 回复  |  直到 7 年前
        1
  •  3
  •   Nate xin ding    7 年前

    你想要baseR函数 with() .

    mtcars %>% 
      group_by(cyl) %>% 
      mutate(group_pct = hp / sum(hp)) %>%
      with(paste0('Words: ', mean(group_pct)))
    
    [1] "Words: 0.09375"
    

    你最初尝试的问题是 group_pct 没有在全局环境中定义,因此当它在查找中找不到它时,会收到错误消息。

    with paste0() 在通过管道传递的数据帧的环境中进行函数调用。所以它发现 并返回预期结果。

        2
  •  4
  •   zack    7 年前

    根据OP的澄清:

    mtcars %>% 
      group_by(cyl) %>% 
      mutate(group_pct = hp / sum(hp)) %>%
      pull(group_pct) %>%
      mean() %>%
      paste0("Words: ", .)
    
    [1] "Words: 0.09375"
    
        3
  •  1
  •   divibisan    7 年前

    问题在于你是如何进入 mean 功能。查看错误消息:

    Warning message:
    In mean.default(., group_pct)
    

    group_pct 列,但实际上发生的是 意思是 正在接收整个管道数据帧 . 表示管道的输出)和对象 集团公司 可能存在也可能不存在。

    看看这个答案: https://stackoverflow.com/a/38475455/8366499

    如果要将管道数据框在均值函数中,需要使用花括号 {} 所以对mean的调用被看作是表达式,而不是函数调用。然后,您可以将 根据需要设置对象:

    mtcars %>% 
        group_by(cyl) %>% 
        mutate(group_pct = hp / sum(hp)) %>% 
        {mean(.$group_pct)} %>%
        paste0('Words: ', .)
    
    [1] "Words: 0.09375"
    
        4
  •  0
  •   Sal-laS    7 年前
    library(tidyverse)
    library(purrr)
    
    mtcars %>% 
      mutate(group_pct = hp / sum(hp)) %>% 
      summarise_all(mean) %>%
      select(group_pct) %>%
      map(function(x) paste0(" Word ", x))
    

    结果是:

    "Word 0.03125"