R中百分比的分类变量表

时间:2017-12-07 23:09:07

标签: r dplyr data.table tibble

我有一系列具有响应选项的分类变量(有利,不利,中性)。

我想在R中创建一个表,它将列出行中的所有10个变量(每行一个变量) - 列中的响应“有利,不利,中性”。这可能在R?理想情况下,我还希望能够通过另一个分类变量对此进行分组(例如,比较男性与女性对问题的回答方式不同)。

2 个答案:

答案 0 :(得分:0)

如果您提供实际数据样本,您将获得更好的答案(请参阅this post)。也就是说,这是一个使用dplyr::(和reshape2::melt)的解决方案。

# function to create a column of fake data 
make_var <- function(n=100) sample(c("good","bad","ugly"), size=n, replace=TRUE)

# put ten of them together 
dat <- as.data.frame(replicate(10, make_var()), stringsAsFactors=FALSE) 

library("dplyr")

# then reshape to long format, group, and summarize -- 
dat %>% reshape2::melt(NULL) %>% group_by(variable) %>% summarize(
    good_pct = (sum(value=="good") / length(value)) * 100, 
    bad_pct = (sum(value=="bad") / length(value)) * 100, 
    ugly_pct = (sum(value=="ugly") / length(value)) * 100
)

请注意,要按其他列(例如性别)进行分组,您可以在汇总之前说出group_by(variable, sex)(只要sex是数据的一列,而不是这个构造的例子)。

答案 1 :(得分:-1)

调整lefft的示例,但尝试在dplyr中执行所有操作:

dat %>% 
    gather(variable, value) %>%
    group_by(variable) %>%
    count(value) %>%
    mutate(pct = n / sum(n) * 100) %>%
    select(-n) %>%
    spread(value, pct)