如何在R的dplyr / forcats包中使用factorf语法?

问题描述

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

我正在尝试使用dplyr方式执行此操作,使用管道运算符而不是$语法来访问变量,但这似乎不起作用。我只是从根本上误解了语法吗?

pid <- c('id1','id2','id3','id4','id5','id6')
gender <- c('Male','Female','Other','Male','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的新手,对这样愚蠢的问题感到抱歉,但我似乎在任何地方都找不到基本示例!

解决方法

您可以只使用group_by和n()

pid <- c('id1','id2','id3','id4','id5','id6')
gender <- c('Male','Female','Other','Male','Female')
df <- data.frame(pid,gender)
df <- tibble::tibble(df)


df %>%
  dplyr::group_by(gender) %>%
  dplyr::summarise(cnt_gender = n()) %>% 
  dplyr::ungroup()



,

fct_count采用的矢量是类型因子或char类型,它并不是特别了解小标题和数据帧。所以最简单的管道就是...

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',gender)
df <- tibble::as_tibble(df)
df

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...