【问题标题】:tabulate one variable in a data.frame against all others using janitor::tabyl使用 janitor::tabyl 将 data.frame 中的一个变量与所有其他变量制成表格
【发布时间】:2021-01-21 20:41:37
【问题描述】:

数据:

product q1 q2 q3
1 5 9 NA
1 6 7 NA
2 4 4 9
2 9 6 8
2 8 4 NA

这是一个小例子,但我的代码循环通过列 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,有没有办法显示所有比例值?

【问题讨论】:

  • 我稍微修改了你的问题以澄清它,我希望我能准确地解释它。通常有一种比 for 循环更自然(对 R 而言)的迭代方式,在这里,当您的循环需要单个向量或数据时,它会将向量 (dataset[,i]) 和列名的混合发送到 tabyl。框架和两个列名。

标签: r janitor


【解决方案1】:

数据

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)

要使表格显示您的 product 变量与所有其他列相比,您可以先将数据设置为“长”,然后使用您最初拥有的函数:

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%

【讨论】:

  • 如果有人有一个很好的方法来处理整个数据,而不是将所有变量放入一个共享列中,我很乐意看到它。然后它将对具有不同因子水平的变量具有鲁棒性。
  • 谢谢,这种方法效果很好。但是,是的,就像你说的那样,我确实有不同因素的变量,例如 1-9 和 1-5,我忘了提及。
猜你喜欢
  • 2019-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
  • 1970-01-01
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多