带有频率和百分比的双向列联表

3
我得到了下面这个带有单元格百分比和频率(括号内)的双向列联表。
gender       blue blue-gray       brown      dark      hazel    yellow
 female 33.33% (3) 0.00% (0) 55.56%  (5) 0.00% (0) 11.11% (1) 0.00% (0)
   male 34.62% (9) 3.85% (1) 46.15% (12) 3.85% (1)  3.85% (1) 7.69% (2)

我使用的R代码是

library(dplyr)

library(janitor)

starwars %>%
  filter(species == "Human") %>% 
  tabyl(gender, eye_color) %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 2) %>%
  adorn_ns()

然而,我希望获得与单元格频率相同的表格,并附有百分比(用括号表示)。请帮忙。

你想要 (33.33%) (3) 吗?尝试 %>% mutate_at(-1, list(~ str_replace(., "^([0-9.%]+)", "(\\1)"))) - akrun
感谢@akrun的评论。但是,我想要像这样的东西3(33.33%) - MYaseen208
1个回答

5

我们可以将adorn_ns中的position参数从rear(默认)更改为front

library(tidyverse)
starwars %>%
  filter(species == "Human") %>% 
   tabyl(gender, eye_color) %>%
   adorn_percentages("row") %>%
   adorn_pct_formatting(digits = 2) %>%
   adorn_ns(position = "front")
# gender       blue blue-gray       brown      dark      hazel    yellow
# female 3 (33.33%) 0 (0.00%)  5 (55.56%) 0 (0.00%) 1 (11.11%) 0 (0.00%)
#   male 9 (34.62%) 1 (3.85%) 12 (46.15%) 1 (3.85%) 1  (3.85%) 2 (7.69%)

如果对象已经被创建,另一个选项是使用 mutate_at 进行后期处理,通过捕获两个块中的字符并反转后向引用的位置来改变除第一列以外所有列的格式,同时添加 () 表示百分比。
library(tidyverse)
starwars %>%
  filter(species == "Human") %>% 
  tabyl(gender, eye_color) %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 2) %>%
  adorn_ns() %>% 
  mutate_at(-1, list(~ str_replace(., "^([0-9.%]+)\\s+\\((\\d+)\\)", "\\2 (\\1)")))
# gender       blue blue-gray       brown      dark      hazel    yellow
#1 female 3 (33.33%) 0 (0.00%)  5 (55.56%) 0 (0.00%) 1 (11.11%) 0 (0.00%)
#2   male 9 (34.62%) 1 (3.85%) 12 (46.15%) 1 (3.85%)  1 (3.85%) 2 (7.69%)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接