如何将带有总计的列联表转换为包含所有值的数据集?

时间:2015-10-13 14:51:14

标签: r dataframe contingency

假设我有下表:

_                    Male Female    Total
Pay_with_cash         55     15      70
Use_a_credit_card     60     40     100
Total                115     55     170

如何将此转换为55行的数据集,其中包含使用现金支付的男性,以及使用现金支付的女性的15行等?我希望只有两个变量:性别和付款类型。这可能在R?虽然这不会在此界面中显示为表格,但请设想一个列联表格。

1 个答案:

答案 0 :(得分:1)

你可以通过重塑然后dplyr来做到这一点。

library(dplyr)
library(tidyr)
library(magrittr)

your_table = 
  c(55, 60, 115, 15, 40, 55, 70, 100, 170) %>%
  matrix(3) %>%
  set_rownames(c("Pay_with_cash",
                 "Use_a_credit_card",
                 "Total")) %>%
  set_colnames(c("Male", "Female", "Total"))


your_table %>%
  as.data.frame %>%
  select(-Total) %>%
  mutate(payment_type = rownames(.)) %>%
  filter(payment_type != "Total") %>%
  gather(gender, frequency, Male, Female) %>%
  group_by(payment_type, gender) %>%
  do(data_frame(ones = rep(1, .$frequency))) %>%
  select(-ones)
相关问题