Экономист по исследованиям здесь.Я работаю с R, чтобы объединить наборы данных College Scorecard и IPEDS для вывода в один CSV для запуска OLS в Stata.Я очень доволен кодом слияния College Scorecard, но хотя код слияния IPEDS работает, он довольно грубый, и я бы хотел помочь его оптимизировать.Ниже приведен фрагмент одного из кода слияния за один из лет для одной из переменных.Если это поможет взглянуть на структуру набора данных, дайте мне знать, и я посмотрю, как я могу опубликовать наборы данных.
# 1.2.1.1 - 2008
ipeds2008ControlTuitionSTFRAdmissions = read.csv(file = file.path(ipedsDir, "2008ControlTuitionSTFRAdmissions.csv"), stringsAsFactors = FALSE)
ipeds2008Gender = read.csv(file = file.path(ipedsDir, "2008Gender.csv"), stringsAsFactors = FALSE)
ipeds2008Grad = read.csv(file = file.path(ipedsDir, "2008Grad.csv"), stringsAsFactors = FALSE)
ipeds2008Race = read.csv(file = file.path(ipedsDir, "2008Race.csv"), stringsAsFactors = FALSE)
.
.
.
# 1.2.2.1 - 2008
ipeds2008GenderGrad = merge(ipeds2008Gender,
ipeds2008Grad)
ipeds2008GenderGradRace = merge(ipeds2008GenderGrad,
ipeds2008Race)
ipeds2008 = merge(ipeds2008GenderGradRace,
ipeds2008ControlTuitionSTFRAdmissions)
# Garbage management.
rm(ipeds2008Gender,
ipeds2008ControlTuitionSTFRAdmissions,
ipeds2008GenderGrad,
ipeds2008GenderGradRace,
ipeds2008Race,
ipeds2008Grad)
.
.
.
# Now, let's merge all the IPEDS years.
ipedsMerged = Reduce(function(x, y) merge(x, y, all=TRUE), list(ipeds2008,
ipeds2009,
ipeds2010,
ipeds2011,
ipeds2012,
ipeds2013,
ipeds2014,
ipeds2015,
ipeds2016,
ipeds2017))
.
.
.
# Now, let's merge all the IPEDS years.
ipedsMerged = Reduce(function(x, y) merge(x, y, all=TRUE), list(ipeds2008,
ipeds2009,
ipeds2010,
ipeds2011,
ipeds2012,
ipeds2013,
ipeds2014,
ipeds2015,
ipeds2016,
ipeds2017))
# Because we currently have each variable year as a separate variable (with nulls in observation years that
# aren't in that year), we want to merge all the variable years into one variable, if that makes sense. Dplyr's
# coalesce function is very good at that. Let's start with the public vs private variable.
ipedsMerged$institutionalControl = coalesce(ipedsMerged$IC2008.Institutional.control.or.affiliation,
ipedsMerged$IC2009.Institutional.control.or.affiliation,
ipedsMerged$IC2010.Institutional.control.or.affiliation,
ipedsMerged$IC2011.Institutional.control.or.affiliation,
ipedsMerged$IC2012.Institutional.control.or.affiliation,
ipedsMerged$IC2013.Institutional.control.or.affiliation,
ipedsMerged$IC2014.Institutional.control.or.affiliation,
ipedsMerged$IC2015.Institutional.control.or.affiliation,
ipedsMerged$IC2016.Institutional.control.or.affiliation,
ipedsMerged$IC2017.Institutional.control.or.affiliation)
# Dropping all the rows that we don't need now.
ipedsMerged = ipedsMerged[ , !(names(ipedsMerged) %in% c("IC2008.Institutional.control.or.affiliation",
"IC2009.Institutional.control.or.affiliation",
"IC2010.Institutional.control.or.affiliation",
"IC2011.Institutional.control.or.affiliation",
"IC2012.Institutional.control.or.affiliation",
"IC2013.Institutional.control.or.affiliation",
"IC2014.Institutional.control.or.affiliation",
"IC2015.Institutional.control.or.affiliation",
"IC2016.Institutional.control.or.affiliation",
"IC2017.Institutional.control.or.affiliation",
"IDX_EF",
"IDX_GR"))]
.
.
.
ipedsTbl = as_tibble(ipedsMerged)
# Let's do some more garbage management.
rm(ipeds2008,
ipeds2009,
ipeds2010,
ipeds2011,
ipeds2012,
ipeds2013,
ipeds2014,
ipeds2015,
ipeds2016,
ipeds2017,
ipedsMerged)
# 1.3 - For the piece de resistance, let's merge ipeds and college scorecard.
ipedsCS = left_join(ipedsTbl, csTbl, by = c("unitid" = "unitid", "year" = "year"))
write_csv(ipedsCS, path = file.path(thisDir, "Data", "Merged", "ipedsCS.csv"))