【发布时间】:2020-02-11 04:53:48
【问题描述】:
我正在尝试将我的数据重塑为宽格式,但我是新手,到目前为止,普通的重塑功能似乎不起作用。当我尝试使用完整数据时(虽然这段摘录似乎有效),我得到了所有值的 NA 值,并且列名变成了奇怪的数字向量。
我的数据看起来像这样,PNR 是一个 id 变量,对于每个观察都是唯一的。
PNR ZIPCODE SEL_CRITERION QUAL_RATING QUEUENUMBER UPSEC_ID UPSEC_COURSE_ID MARK COURSEOFFERING_ID ADMISSIONROUND_ID RESULT WITHIN_PROGRAM SUMMA
1234567890 46395 HB 55 0 HRF SV203 G 97116 HT2019 20 0 67.5
1234567890 46395 HB 55 0 HRF EN200 VG 97116 HT2019 20 0 67.5
1234567890 46395 HB 55 0 HRF MA200 VG 97116 HT2019 20 0 67.5
1234567890 46395 HB 55 0 HRF <null> <null> 97116 HT2019 20 0 67.5
2345678901 42332 B5 2645 0 3SB EN1201 VG 97116 HT2019 20 0 70.5
2345678901 42332 B5 2645 0 3SB MA1201 VG 97113 HT2019 20 0 70.5
2345678901 42332 B5 2645 0 2SM SV1201 VG 97113 HT2019 20 0 70.5
我希望它看起来像这样:
PNR ZIPCODE HB B5 QUEUENUMBER UPSEC_ID SV203 EN200 MA200 <null> EN1201 MA1201 SV1201
1234567890 46395 95 NA 0 HRF G VG VG NA NA NA NA
2345678901 42332 NA 1645 0 3SB NA NA NA NA VG VG VG
有什么办法可以实现吗?
我尝试使用普通的 reshape 函数,但失败得很惨(虽然不一定在这个小摘录中):
test<-reshape(HT2018, idvar="PNR",timevar=c("SEL_CRITERION", "UPSEC_COURSE_ID"), v.names=c("QUAL_RATING","MARK"), direction = "wide")
我还尝试了 reshape2 包中的 melt 和 cast 函数,它返回一个包含三个值的单行(它们都不正确),尽管我当然可能做错了什么:
test<-melt(HT2018, id="PNR")
test<-cast(test, QUAL_RATING + MARK ~ PNR)
structure(list(PNR = c(1234567890, 1234567890, 1234567890, 1234567890,
2345678901, 2345678901, 2345678901), ZIPCODE = c(46395L, 46395L,
46395L, 46395L, 42332L, 42332L, 42332L), SEL_CRITERION = structure(c(2L,
2L, 2L, 2L, 1L, 1L, 1L), .Label = c("B5", "HB "), class = "factor"),
QUAL_RATING = c(55L, 55L, 55L, 55L, 2645L, 2645L, 2645L),
QUEUENUMBER = c(0L, 0L, 0L, 0L, 0L, 0L, 0L), UPSEC_ID = structure(c(2L,
2L, 2L, 2L, 1L, 1L, 1L), .Label = c("3SB", "HRF"), class = "factor"),
UPSEC_COURSE_ID = structure(c(7L, 3L, 5L, 1L, 2L, 4L, 6L), .Label = c("<null>",
"EN1201 ", "EN200 ", "MA1201 ", "MA200 ",
"SV1201 ", "SV203 "), class = "factor"), MARK = structure(c(2L,
3L, 3L, 1L, 3L, 3L, 3L), .Label = c("<null>", "G ", "VG "
), class = "factor"), COURSEOFFERING_ID = c(97113L, 97113L,
97113L, 97113L, 97113L, 97113L, 97113L), ADMISSIONROUND_ID = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L), .Label = "HT2018 ", class = "factor"),
RESULT = c(20L, 20L, 20L, 20L, 20L, 20L, 20L), WITHIN_PROGRAM = c(0L,
0L, 0L, 0L, 0L, 0L, 0L), SUMMA = structure(c(1L, 1L, 1L,
1L, 2L, 2L, 2L), .Label = c("67.5", "70.5"), class = "factor")), class = "data.frame", row.names = c(NA,
-7L))
【问题讨论】:
-
在您的首选输出示例中:新列 HB 和 B5 的值是从哪里获取的?即分别为 95 和 1645。