манипулирование массивом в data.frame в BASE R - PullRequest
2 голосов
/ 21 апреля 2020

UCBAdmissions - это набор данных BASE R в формате массива.

Мне было интересно, как я могу переформатировать UCBAdmissions, чтобы стать data.frame, как показано на рисунке ниже в BASE R?

Я безуспешно пробовал следующее:

as.data.frame.table(UCBAdmissions)

Требуемый вывод data.frame:

enter image description here

Ответы [ 2 ]

3 голосов
/ 21 апреля 2020

После создания набора данных с as.data.frame.table, можно reshape в «широкий» формат

out <- as.data.frame.table(UCBAdmissions)
out$rn <- with(out, ave(seq_along(Admit), Admit, Gender, Dept, FUN = seq_along))
out1 <- transform(reshape(out, idvar = c("Gender", "Dept", "rn"), 
    direction = 'wide', timevar = 'Admit'), 
            applications = Freq.Admitted + Freq.Rejected)[, c(2, 1, 4:6)]
names(out1)[1:4] <- c('dept', 'applicant.gender', 'admit', 'reject')
row.names(out1) <- NULL
out1
#   dept applicant.gender admit reject applications
#1     A             Male   512    313          825
#2     A           Female    89     19          108
#3     B             Male   353    207          560
#4     B           Female    17      8           25
#5     C             Male   120    205          325
#6     C           Female   202    391          593
#7     D             Male   138    279          417
#8     D           Female   131    244          375
#9     E             Male    53    138          191
#10    E           Female    94    299          393
#11    F             Male    22    351          373
#12    F           Female    24    317          341
1 голос
/ 21 апреля 2020

Преобразуйте UCBAdmissions в таблицу, а затем используйте ftable2df из этого ответа SO Преобразование массива в data.frame , чтобы преобразовать его в data.frame. Наконец, вычислите итоги. Используется только база R.

transform(ftable2df(ftable(UCBAdmissions, row.vars = 3:2)), 
  Applications = Admitted + Rejected)

, дающая:

   Dept Gender Admitted Rejected Applications
1     A   Male      512      313          825
2     A Female       89       19          108
3     B   Male      353      207          560
4     B Female       17        8           25
5     C   Male      120      205          325
6     C Female      202      391          593
7     D   Male      138      279          417
8     D Female      131      244          375
9     E   Male       53      138          191
10    E Female       94      299          393
11    F   Male       22      351          373
12    F Female       24      317          341
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...