r - 使用 janitor::tabyl 将 data.frame 中的一个变量与所有其他变量制成表格
问题描述
数据:
产品 | q1 | q2 | q3 |
---|---|---|---|
1 | 5 | 9 | 不适用 |
1 | 6 | 7 | 不适用 |
2 | 4 | 4 | 9 |
2 | 9 | 6 | 8 |
2 | 8 | 4 | 不适用 |
这是一个小例子,但我的代码循环通过列 q2,当到达 q3 时,它显示
Error: Selections can't have missing values.
不能将 Null 值更改为 0,因为它会改变平均值。
代码
for(i in 2:ncol(dataset)){
column<-names(dataset[i])
count<-tabyl(dataset,dataset[,i],product,show_na = FALSE,show_missing_levels = FALSE) %>% adorn_percentages("col") %>% adorn_pct_formatting(digits=0)
print(column)
print(count)
}
另外,q1,q2 等是基于问题的产品排名,所以排名尺度是 1-9,但在数据集中有一些规模的数字没有提到。即使频率为0,有没有办法显示所有比例值?
解决方案
数据
x <- read.table(text = "product q1 q2 q3
1 5 9 NA
1 6 7 NA
2 4 4 9
2 9 6 8
2 8 4 NA", header = TRUE)
要使 tabylsproduct
针对所有其他列显示您的变量,您可以首先使数据“长”,然后使用您最初拥有的函数:
x %>%
pivot_longer(q1:q3, "q", "value") %>%
mutate(value = factor(value, levels = 1:9)) %>% # this is for your 1-9 scale
tabyl(value, product, q, show_na = FALSE) %>%
adorn_percentages("col") %>%
adorn_pct_formatting(digits = 0) %>%
adorn_title()
结果
$q1
product
value 1 2
1 0% 0%
2 0% 0%
3 0% 0%
4 0% 33%
5 50% 0%
6 50% 0%
7 0% 0%
8 0% 33%
9 0% 33%
$q2
product
value 1 2
1 0% 0%
2 0% 0%
3 0% 0%
4 0% 67%
5 0% 0%
6 0% 33%
7 50% 0%
8 0% 0%
9 50% 0%
$q3
product
value 1 2
1 - 0%
2 - 0%
3 - 0%
4 - 0%
5 - 0%
6 - 0%
7 - 0%
8 - 50%
9 - 50%
推荐阅读
- python - python多进程在virtualenv中不执行函数
- html - 如何正确定位和制作截面
- python-3.x - Python 计数器和值
- javascript - 单选按钮的角度模板引用变量
- java - 如何将链表附加到另一个链表的末尾?
- spring-boot - 无法将我的 Spring Boot 应用程序运行到 Docker 中
- java - 需要帮助从我的方法中传递我的变量
- heroku - Heroku 挂起:命令后不释放 CLI
- react-native - 将 png 图像置于视图中间
- android-studio - 如果忘记插入电话线,如何防止 Android Studio 启动模拟器