Условное форматирование в таблицах expss - PullRequest
1 голос
/ 06 апреля 2020

Мой вопрос может быть связан с расширением следующего обсуждения: R expss package: форматировать числа по статистике c / применять другой формат для чередующихся строк

Я хотел бы понять грамматика условий, чтобы можно было писать свои собственные форматы. Рассмотрим фрейм данных вставки из наборов данных. Затем мы создаем следующую таблицу благодаря expss:

infert %>%
  tab_cells(parity) %>%
  ### TOTAL
  tab_cols(total()) %>%
  tab_stat_cases(label="N", total_row_position="none") %>%
  ### OTHER VARIABLES
  tab_cols(education) %>%
  tab_stat_cases(label="N", total_row_position="none") %>% 
  tab_stat_cpct(label="%Col.", total_row_position="none") %>%
  tab_pivot(stat_position="inside_columns") %>%
  format_vert()

В последней строке используется базовое форматирование c, как обсуждалось в приведенном выше URL-адресе. Подробно:

format_vert = function(tbl, pct_digits=2, n_digits=0){
  #Finding columns to format
  pct_cols = grepl("\\|%Col.$", names(tbl), perl = TRUE)
  n_cols = grepl("\\|N$", names(tbl), perl = TRUE)
  #Format
  recode(tbl[,-1]) = other ~ function(x) ifelse(is.numeric(x) & is.na(x), 0, x)
  tbl[,pct_cols] = format(tbl[,pct_cols], digits=pct_digits, nsmall=pct_digits) 
  tbl[,n_cols] = format(tbl[,n_cols], digits=n_digits, nsmall=n_digits)
  recode(tbl[,pct_cols]) = other ~ function(x) paste0(x, "%")
  tbl
}

Я понимаю, как форматировать целые таблицы или столбцы (эксперты заметили бы различия по сравнению с примером в URL), но что если я только wi sh отформатирую спецификацию c клеток? Например, как установить digits=0, когда значение = 100,00% (показывать только 100%)? Я не знаю, стоит ли мне go для recode, format, когда и куда ссылаться tbl[,pct_cols] ...

Спасибо!

1 Ответ

1 голос
/ 08 апреля 2020

Самый простой способ - вставить дополнительные записи в recode в функции format_vert. Мы не можем использовать перекодирование в форме '100,00' ~ '100', потому что столбцы уже выровнены с пробелами. Поэтому мы используем регулярные выражения. perl означает сравнение регулярных выражений в стиле * 1007, а \\b означает границу слова. Все значения, которые будут совпадать с таким выражением, будут перекодированы.

data(infert)
format_vert = function(tbl, pct_digits=2, n_digits=0){
    #Finding columns to format
    pct_cols = grepl("\\|%Col.$", names(tbl), perl = TRUE)
    n_cols = grepl("\\|N$", names(tbl), perl = TRUE)
    #Format
    recode(tbl[,-1]) = other ~ function(x) ifelse(is.numeric(x) & is.na(x), 0, x)
    tbl[,pct_cols] = format(tbl[,pct_cols], digits=pct_digits, nsmall=pct_digits) 
    tbl[,n_cols] = format(tbl[,n_cols], digits=n_digits, nsmall=n_digits)
    recode(tbl[,pct_cols]) = c(
        perl("\\b0.00\\b") ~ "0%   ",  # additional recodings
        perl("\\b100.00\\b") ~ "100%   ", # additional recodings
        other ~ function(x) paste0(x, "%")
    )
    tbl
}

infert %>%
    tab_cells(parity) %>%
    ### TOTAL
    tab_cols(total()) %>%
    tab_stat_cases(label="N", total_row_position="none") %>%
    ### OTHER VARIABLES
    tab_cols(education) %>%
    tab_stat_cases(label="N", total_row_position="none") %>% 
    tab_stat_cpct(label="%Col.", total_row_position="none") %>%
    tab_pivot(stat_position="inside_columns") %>%
    format_vert()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...