简体   繁体   English

将数组操作到 BASE R 中的 data.frame 中

[英]manipulating an array into a data.frame in BASE R

UCBAdmissions is a BASE R dataset in the array format. UCBAdmissions是数组格式的 BASE R 数据集。

I was wondering how I could reformat UCBAdmissions to become a data.frame as shown in the picture below in BASE R?我想知道如何将UCBAdmissions重新格式化为 data.frame,如下图 BASE R 所示?

I have tried the following without success:我尝试了以下方法但没有成功:

as.data.frame.table(UCBAdmissions)

Desired data.frame output:所需的data.frame output:

在此处输入图像描述

After creating the dataset with as.data.frame.table , can reshape into 'wide' format使用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

Convert UCBAdmissions to an ftable and then use ftable2df from this SO answer Reshaping an array to data.frame to convert it to a data.frame.UCBAdmissions转换为ftable2df ,然后使用此 SO 答案中的 ftable2df Reshaping an array to data.frame将其转换为 data.frame。 Finally compute the totals.最后计算总数。 Only base R is used.仅使用基础 R。

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

giving:给予:

   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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM