gt 表不遵守行标签中的因素级别

gt tables not honoring factors levels in row labels

我在使用其他优秀的 gt 包制作 table 时遇到了一个愚蠢的问题。

我有这个table:

currTab <- structure(list(`Age range` = structure(c(5L, 6L, 7L, 8L, 9L, 
10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 1L, 2L, 3L, 4L), .Label = c(" ≤1 year", 
"2 yrs", "3 yrs", "4 yrs", "5 yrs", "6 yrs", "7-8 yrs", "9-10 yrs", 
"11-12 yrs", "13-14 yrs", "15-16 yrs", "19-30 yrs", "31-40 yrs", 
"41-50 yrs", "51-60 yrs", "61-70 yrs", " ≥70 yrs"), class = c("ordered", 
"factor")), minF_Female = c(192.513259215355, 183.831034165788, 
171.923523427238, 158.002976410505, 146.564781760376, 137.789704831087, 
127.370737204799, 128.398075852923, 127.830665246427, 114.61707107954, 
90.3633466641061, 78.010313243078, 78.1870193570691, NA, NA, 
NA, NA), minF_Male = c(207.855719860607, 191.535711870608, 169.079769539432, 
142.555089696259, 120.190679816665, 102.112304160514, 79.4522096443978, 
74.5501293799995, 74.0560562513096, 69.8375905638724, 57.7437980326593, 
49.4092475281028, 48.9416497200912, NA, NA, NA, NA), maxF_Female = c(488.066672846171, 
489.629983633728, 490.630420606523, 489.6953109154, 485.997969341596, 
479.493366060129, 457.131832057242, 386.052841894336, 356.20654778542, 
432.373754791911, 550.984958319451, 599.030148485128, 622.392016651455, 
NA, NA, NA, NA), maxF_Male = c(386.491941716704, 383.013074412721, 
377.262604560802, 368.664103740006, 358.88619036232, 347.858049187743, 
321.425630395873, 258.610024319393, 223.40438098279, 272.562362517114, 
352.663065356397, 389.139726222453, 396.387425129329, NA, NA, 
NA, NA), nominalF1_Female = c(792.606585070623, 774.67333252336, 
748.978655452818, 716.766904166985, 687.067342631714, 659.942877422917, 
613.464127049404, 549.839814945283, 524.453021680478, 524.604252664451, 
511.016250159981, 490.803284150502, 486.151004978768, 870.189435502058, 
849.931906280897, 830.243701660919, 811.132651353652), nominalF1_Male = c(754.927353762102, 
735.91406180303, 708.672474530183, 674.554785316654, 643.185788473706, 
614.682090933963, 565.988043403975, 499.441794119581, 471.850496193325, 
467.279224258147, 461.886047442941, 458.911042417315, 509.566754276534, 
837.039982744214, 815.632443409745, 794.801313106926, 774.561360377223
), nominalF2_Female = c(2316.79654051926, 2274.86292176996, 2214.51473531373, 
2138.33574040433, 2067.34402899125, 2001.61879507854, 1885.76397373785, 
1714.61348292451, 1625.93585114191, 1622.14234117408, 1641.9648727809, 
1707.39999135551, 1820.70094063161, 2497.1503947177, 2450.18163132232, 
2404.46219881265, 2359.99840070589), nominalF2_Male = c(2204.72154293521, 
2158.60270220094, 2092.40242942714, 2009.22489043384, 1932.3313895761, 
1861.92275643787, 1740.32902601832, 1567.84624090872, 1487.1049441955, 
1467.78392743302, 1499.7012515019, 1581.48607357091, 1689.73201386241, 
2403.51904879437, 2351.72182188825, 2301.30633827736, 2252.29783346018
), nominalF3_Female = c(3716.13980758452, 3629.61667155808, 3506.02757238294, 
3351.95172828646, 3211.26448866239, 3084.53931579307, 2871.44540359288, 
2591.76336829096, 2553.30039539724, 2581.55257096308, 2593.29167872634, 
2617.84457067156, 2692.78060751014, 3695.7825841822, 3626.26881435704, 
3558.60405424272, 3805.66484270251), nominalF3_Male = c(3398.97976277625, 
3327.2795690819, 3224.61918529811, 3096.22641948377, 2978.49201056792, 
2871.90468878882, 2690.5686257907, 2445.67764464339, 2369.21560078373, 
2361.71802712342, 2414.55734269414, 2497.82856943456, 2539.1115058239, 
3557.20819221567, 3480.54829639461, 3405.93338065049, 3473.04043452418
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-17L))

其中 Age range 列是一个因子:

> levels(currTab$`Age range`)
 [1] " ≤1 year"  "2 yrs"     "3 yrs"     "4 yrs"     "5 yrs"     "6 yrs"     "7-8 yrs"   "9-10 yrs"  "11-12 yrs" "13-14 yrs" "15-16 yrs"
[12] "19-30 yrs" "31-40 yrs" "41-50 yrs" "51-60 yrs" "61-70 yrs" " ≥70 yrs" 

并应用此格式代码:

currTab %>% 
  gt(rowname_col = "Age range")  %>%
  tab_stubhead(label="Age range")  %>%
  tab_spanner(
    label = "Female speakers",
    columns = c(minF_Female,maxF_Female,nominalF1_Female,   nominalF2_Female,nominalF3_Female)
  ) %>%
  tab_spanner(
    label = "Male speakers",
    columns = c(minF_Male,maxF_Male,nominalF1_Male, nominalF2_Male,nominalF3_Male)
  ) %>%
    cols_label(
    minF_Female = "minF",
    maxF_Female = "maxF",
    nominalF1_Female = "nominalF1",
    nominalF2_Female = "nominalF2",
    nominalF3_Female = "nominalF3" ,
    minF_Male = "minF",
    maxF_Male = "maxF",
    nominalF1_Male = "nominalF1",
    nominalF2_Male = "nominalF2",
    nominalF3_Male = "nominalF3"
  ) %>%
  fmt_integer(
    columns = minF_Female:nominalF3_Male,
    use_seps=FALSE
  ) %>%
  fmt_missing(everything(),missing_text="---")

得到这个 table:

如您所想,我更希望 Age range 列跟在因子水平之后,而不是像那样将第一个带有空列的列放在末尾。

有什么想法吗?

弗雷德里克

预先订购数据框:

基础 R

currTab[order(currTab$`Age range`),]

dplyr

currTab %>%
  arrange(`Age range`)

输出

currTab %>%
  arrange(`Age range`) %>% 
  gt(rowname_col = "Age range")  %>%
  tab_stubhead(label="Age range")  %>%
  tab_spanner(
    label = "Female speakers",
    columns = c(minF_Female,maxF_Female,nominalF1_Female,   nominalF2_Female,nominalF3_Female)
  ) %>%
  tab_spanner(
    label = "Male speakers",
    columns = c(minF_Male,maxF_Male,nominalF1_Male, nominalF2_Male,nominalF3_Male)
  ) %>%
  cols_label(
    minF_Female = "minF",
    maxF_Female = "maxF",
    nominalF1_Female = "nominalF1",
    nominalF2_Female = "nominalF2",
    nominalF3_Female = "nominalF3" ,
    minF_Male = "minF",
    maxF_Male = "maxF",
    nominalF1_Male = "nominalF1",
    nominalF2_Male = "nominalF2",
    nominalF3_Male = "nominalF3"
  ) %>%
  fmt_integer(
    columns = minF_Female:nominalF3_Male,
    use_seps=FALSE
  ) %>%
  fmt_missing(everything(),missing_text="---")