首页 > 解决方案 > 使用 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,有没有办法显示所有比例值?

标签: rjanitor

解决方案


数据

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%

推荐阅读