Mam dane syntetyczne w tablicy 2 * 4 z 500 obserwacjami:

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'))

Chciałbym wyprodukować data.frame z tabeli reprezentującej "źródło" tabeli częstotliwości.

Mogę to reprezentować przez kolumnę "Freq" ({x0}}, również Tutaj), ale chciałbym wyprodukować dane.frame z 500 rzędami i 2 kolumnami (płeć, kara).

Jak mógłbym to zrobić w r?

r
3
ben_aaron 20 luty 2019, 16:49

2 odpowiedzi

Najlepsza odpowiedź

Spróbuj tego:

long <- as.data.frame.table(datax)
longer <- long[rep(1:nrow(long), long$Freq), -3]
5
G. Grothendieck 20 luty 2019, 13:55

Korzystanie z dplyr:

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

To konstruuje nową tabelę dla każdego wiersza w twoich danych, powtarzając Freq razy i pociąga je do jednego gigantycznego stołu.

1
Konrad Rudolph 20 luty 2019, 13:57