从频率表生成data.frame

时间:2019-02-20 13:49:01

标签: r

我在2 * 4数组中有500个观测值的综合数据:

datax = array(c(120, 181, 50, 43, 41, 33,24,8), dim=c(2,4))
dimnames(datax) = list(gender= c('male', 'female')
                    , punishment = c('None', 'Community_service', 'Youth_prison', 'Normal_prison'))

我想从代表频率表“来源”的表中产生一个data.frame

我可以通过“ Freq”列(as.data.frame(as.table(datax)),也可以是here)来表示它,但是我想生成具有500行和2列(性别,惩罚)的data.frame。

我将如何在R中做到这一点?

2 个答案:

答案 0 :(得分:4)

尝试一下:

long <- as.data.frame.table(datax)
longer <- long[rep(1:nrow(long), long$Freq), -3]

答案 1 :(得分:1)

使用dplyr:

as.data.frame.table(datax) %>%
    rowwise() %>%
    do(data.frame(rep(.$gender, .$Freq), .$punishment))

这将为数据中的每一行构造一个新表,重复Freq次,并将它们连接到一个巨型表中。