【问题标题】:Error using dplyr::count() within purrr::map()在 purrr::map() 中使用 dplyr::count() 时出错
【发布时间】:2018-04-24 05:01:44
【问题描述】:

在此示例中,我想将 count() 函数应用于数据集中的每个字符变量。

library(dplyr)
library(purrr)

nycflights13::flights %>% 
    select_if(is.character) %>% 
    map(., count)

但我收到错误消息:

Error in UseMethod("groups") : no applicable method for 
'groups' applied to an object of class "character"

我不确定如何解释错误消息或更新我的代码。类似的代码适用于数值变量,但因子变量会产生与字符变量类似的错误消息

nycflights13::flights %>% 
    select_if(is.numeric) %>% 
    map(., mean, na.rm = TRUE)

nycflights13::flights %>% 
    select_if(is.character) %>% 
    mutate_all(as.factor) %>% 
    map(., count)

【问题讨论】:

  • 您希望输出到底是什么? count() 并不打算用于字符向量——你会得到与 count(letters[1:10]) 相同的错误。
  • count 旨在处理数据框,而不是向量。
  • @MrFlick 我希望查看数据集中每个字符变量的唯一值计数。
  • 你要么想要 map(., table) 要么 %>% count(.) 但他们执行不同的事情
  • 但是您期望的数据结构类型是什么?包含两列(值、计数)的 data.frames 列表?

标签: r dplyr purrr


【解决方案1】:

如果你想要一个包含值计数的小标题列表,你可以使用

nycflights13::flights %>% 
  select_if(is.character) %>% 
  map(~count(data.frame(x=.x), x))

【讨论】:

  • 还有map_df以data.frame格式输出map_df(~ count(data.frame(x = .), x), .id = "var")。使用 .id 来区分变量很方便。
  • 嘿! @MrFlick,谢谢你的回答。但是你能帮我解释一下这是如何工作的吗?为了阅读它,您似乎首先通过提取源数据框的每一列但将其放在单个列中来创建数据框。然后将这个单列数据框传递给计数。但是为什么map(~count(.)) 不能单独工作呢?超级好奇
  • @alejandro_hagan count() 函数是一个 dplyr 函数,它需要 data.frame/tibble 作为第一个参数。当您将 map() 与 data.frame/tibble 一起使用时,您正在映射不是 tibble 的列值。所以如果你想使用count,你需要把那些向量变成data.frames/tibbles。
  • 非常感谢@MrFlick!我现在明白了很多。我真的想不通。感谢您的回复!
猜你喜欢
  • 2019-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多