Как создать счетные и процентные таблицы и линейные графики с 1 независимой переменной и 3 зависимыми - PullRequest
0 голосов
/ 15 сентября 2018

Я - неофит R , и почему-то эта проблема кажется тривиальной.Но, к сожалению, я не смог сделать это после трех дней поиска и экспериментов.

Мои данные в форме, близкой к широкой:

color   agegroup    sex     ses
red     2           Female  A
blue    2           Female  C
green   5           Male    D
red     3           Female  A
red     2           Male    B
blue    1           Female  B
...

Я пытаюсь создать презентабельные таблицы с подсчетами и процентами зависимой переменной (color здесь), упорядоченные по sex, ses и agegroup.Мне нужна одна таблица, упорядоченная по ses и sex для каждого agegroup, с подсчетами рядом с процентами, например:

agegroup:                                  1
sex:                  Female                               Male
ses:        A       B       C       D           A       B       C       D
color:
red         2 1%    0  0%   8 4%    22 11%      16 8%   2   1%  8   4%  3 1.5%
blue        9 4.5%  6  3%   4 2%    2  1%       12 6%   32 16%  14  7%  6   3%
green       4 2%    12 6%   2 1%    8  4%       0  0%   22 11%  40 20%  0   0%

agegroup:                               2
sex:                  Female                               Male
ses:        A       B       C       D           A       B       C       D
color:
red         2 1%    0  0%   8 4%    22 11%      16 8%   2   1%  8   4%  3 1.5%
blue        9 4.5%  6  3%   4 2%    2  1%       12 6%   32 16%  14  7%  6   3%
green       4 2%    12 6%   2 1%    8  4%       0  0%   22 11%  40 20%  0   0%

Я пытался сделать это со всем, начиная с *От 1020 * и expss до gmodels, но я просто не могу понять, как получить такой вывод.CrossTables из gmodels подходит ближе всего, но все еще довольно далеко - (1) он ставит проценты ниже , (2) я не могу получить его в гнезде sel под sex, (3) я не могу понять, как заставить его разбивать результаты по поколениям, и (4) выходные данные полны черточками, вертикальными трубами и пробелами, которые делают помещение его в текстовый процессор или электронную таблицу ошибкой.склонность к ручному делу.

РЕДАКТИРОВАТЬ: я удалил свой второй вопрос (о линейных графиках), потому что ответ на первый вопрос является идеальным и заслуживает доверия, даже если он не касается второго.Я задам второй вопрос отдельно, как и следовало бы с самого начала.

1 Ответ

0 голосов
/ 15 сентября 2018

Ближайший результат с пакетом expss:

library(expss)
# generate example data
set.seed(123)
N = 300
df = data.frame(
    color = sample(c("red", "blue", "green"), size = N, replace = TRUE),
    agegroup = sample(1:5, size = N, replace = TRUE),
    sex = sample(c("Male", "Female"), size = N, replace = TRUE),
    ses = sample(c("A", "B", "C", "D"),  size = N, replace = TRUE),
    stringsAsFactors = FALSE
)

# redirect output to RStudio HTML viewer
expss_output_viewer()
res = df %>% 
    tab_cells("|" = color) %>% # dependent variable, "|" used to suppress label
    tab_cols(sex %nest% ses) %>% # column variable
    tab_rows(agegroup) %>% 
    tab_total_row_position("none") %>% # we don't need total
    tab_stat_cases(label = "Cases") %>% # calculate cases
    tab_stat_cpct(label = "%") %>% # calculate percent
    tab_pivot(stat_position = "inside_columns") %>% # finalize table
    make_subheadings(number_of_columns = 2)

# difficult part - add percent sign
for(i in grep("%", colnames(res))){
    res[[i]] = ifelse(trimws(res[[i]])!="", 
                      paste0(round(res[[i]], 1), "%"),
                      res[[i]] 
                      )
}

# additionlly remove stat labels
colnames(res) = gsub("\\|Cases|%", "", colnames(res), perl = TRUE)

res

В RStudio Viewer результат будет в формате HTML (см. Изображение). К сожалению, я не могу проверить, как это будет вставлено в MS Word. enter image description here Отказ от ответственности: я являюсь автором expss пакета.

...