r - 如何在 R 的 dplyr/forcats 包中使用 factor(f) 语法?
问题描述
我正在尝试做一些非常简单的事情,即使用 R 中的 forcats 包来处理因子。我有一个包含一些因子变量的数据框,其中一个是性别,我只是想使用 fct_count 来计算变量的出现。语法在文档中显示为fct_count(f)
(可能更容易!)。
我正在尝试以 dplyr 方式执行此操作,使用管道运算符而不是 $ 语法来访问变量,但它似乎不起作用。我只是从根本上误解了语法吗?
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 的新手,对这样一个愚蠢的问题感到抱歉,但我似乎无法在任何地方找到一个基本的例子!
解决方案
fct_count
接受一个类型为因子或字符的向量,它并不特别了解小标题和数据帧。所以最简单的管道是......
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
推荐阅读
- javascript - 使用 Java 测量热点问题的时间
- python - 在 Dash 中制作一个与窗口大小相同的 div
- c++ - DirectX11 IASetVertexBuffers“ID3D11Buffer*”不兼容
- git - 如何在单独的驱动器上设置“远程”存储库并克隆该存储库以在具有 git 版本控制的另一个驱动器中工作?
- angular - 角度8如何将父类值传递给子类
- android - 如何使它看起来像心电图,如何在光点之间添加间距
- java - 如何使用颤振包绘制库获取 reddit 评论流?
- javascript - 第二次相同的 `queryByText()` 语句失败
- c# - 如何将 IEnumerable(微软日历事件)插入 mongodb?
- python - 如何获取 GitHub Actions 以在 Ubuntu 中安装 TA-Lib?