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

如何在R中的dplyr/forcats包中使用factor(f)语法?

  •  0
  • LucieCBurgess  · 技术社区  · 5 年前

    我正在尝试做一件非常简单的事情,就是在R中使用forcats包来处理因子。我有一个包含一些因子变量的数据框架,其中一个是性别,我只是尝试使用fct_count来计算变量的出现次数。该语法在文档中显示为 fct_count(f) (还有什么比这更容易的!)。

    我试图用dplyr的方式来实现这一点,使用pipe操作符而不是$syntax来访问变量,但它似乎不起作用。我只是从根本上误解了语法吗?

    pid <- c('id1','id2','id3','id4','id5','id6')
    gender <- c('Male','Female','Other','Male','Female','Female')
    df <- data.frame(pid, gender)
    df <- as.tibble(df)
    df
    
    # A tibble: 6 x 2
      pid   gender
      <chr> <fct> 
    1 id1   Male  
    2 id2   Female
    3 id3   Other 
    4 id4   Male  
    5 id5   Female
    6 id6   Female
    
    # This throws an error
    df %>%
      mutate(gender = as.factor(gender)) %>%
      fct_count(gender) # Error: `f` must be a factor (or character vector).
    
    # This works but doesn't use the nice dplyr select syntax
    fct_count(df$gender)
    # A tibble: 3 x 2
      f          n
      <fct>  <int>
    1 Female     3
    2 Male       2
    3 Other      1
    

    我哪里做错了?dplyr新手,很抱歉问了这么一个愚蠢的问题,但我似乎在任何地方都找不到一个基本的例子!

    1 回复  |  直到 5 年前
        1
  •  1
  •   Chuck P    5 年前

    fct_count 获取一个类型为factor或char的向量,它并不特别了解tibble和数据帧。所以最简单的管道应该是。。。

    library(dplyr)
    library(forcats)
    
    df %>%
       pull(gender) %>%
       fct_count 
    #> # A tibble: 3 x 2
    #>   f          n
    #>   <fct>  <int>
    #> 1 Female     3
    #> 2 Male       2
    #> 3 Other      1
    

    你的数据

    pid <- c('id1','id2','id3','id4','id5','id6')
    gender <- c('Male','Female','Other','Male','Female','Female')
    df <- data.frame(pid, gender)
    df <- tibble::as_tibble(df)
    df
    
        2
  •  0
  •   janderkran    5 年前

    你可以使用groupby和n()

    pid <- c('id1','id2','id3','id4','id5','id6')
    gender <- c('Male','Female','Other','Male','Female','Female')
    df <- data.frame(pid, gender)
    df <- tibble::tibble(df)
    
    
    df %>%
      dplyr::group_by(gender) %>%
      dplyr::summarise(cnt_gender = n()) %>% 
      dplyr::ungroup()
    
    
    
    
    推荐文章