如何创建具有1个自变量和3个因变量的计数和百分比表及折线图

时间:2018-09-15 01:35:38

标签: r expss

我是 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
...

我正在尝试创建可展示的表,其中包含由colorsex和{{ 1}}。我需要一个由sesagegroup组成的表格,每个表格ses的百分数旁边都是计数,像这样:

sex

我一直在尝试使用从agegroupagegroup: 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% datatables的所有方法,但是我只是不知道如何获得这样的输出。 expss中的gmodels最接近,但距离还很远-(1)将百分比计入以下,(2)我无法将其嵌套{ CrossTables下的{1}},(3)我无法弄清楚如何使它按代分解结果,并且(4)输出中充满了破折号,竖线和空格,使得放置它到文字处理器或电子表格中,容易出错的手动操作。

编辑:我删除了我的第二个问题(关于线图),因为第一个问题的答案是完美的,值得称赞,即使它没有涉及第二个问题。我将一开始就单独询问第二个问题。

1 个答案:

答案 0 :(得分:2)

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软件包的作者。