【发布时间】:2020-03-08 12:00:43
【问题描述】:
我有关于某人是否已被一系列学校(1 到 35 岁)录取以及他们如何偏好这些学校的数据。我的数据集最终将有更多的学生和学校,但这是一个模型数据集,可以进行一些跟踪工作。数据看起来像这样,但还会有更多学校:
> head(Schools)
ID S1_AR S1_Rank S2_AR S2_Rank
1 ID001 Provisional Accept 1 Provisional Accept 2
2 ID002 Provisional Accept 1 No Application NA
3 ID003 Provisional Reject 1 Provisional Accept 2
4 ID004 Provisional Reject 2 Provisional Accept 1
5 ID005 Provisional Accept 3 Provisional Accept 1
每个人不能就读多于一所学校,因此如果他们被一所以上的学校临时录取,他们的录取将不被视为他们偏好排名最低的学校。这意味着他们的位置可以供其他学生使用。
我编写了代码,用于识别已被学校 1 和 2 录取的学生,比较他们的排名,并更新他们的录取状态,如下所示。但是,这仅适用于一对学校,我需要为每对 35 所不同的学校做这件事。有没有办法使用 for 循环为不同的学校自动化这个过程?
另外,我知道我的代码目前相当笨拙,但这是我目前让它工作的唯一方法。使用嵌套的 ifelse() 是否有助于使此代码在 for 循环中更易于管理?
Schools$Match <-ifelse(Schools$S1_AR == "Provisional Accept" & Schools$S2_AR == "Provisional Accept", 1, 0)
Schools$Preference<- ifelse(Schools$S1_Rank<Schools$S2_Rank, 1,2)
Schools$S2_AR[Schools$Match == 1 & Schools$Preference == 1]<- "Accepted Elsewhere"
Schools$S1_AR[Schools$Match == 1 & Schools$Preference == 2]<- "Accepted Elsewhere"
head(Schools)
ID S1_AR S1_Rank S2_AR S2_Rank Match Preference
1 ID001 Provisional Accept 1 Accepted Elsewhere 2 1 1
2 ID002 Provisional Accept 1 No Application NA 0 NA
3 ID003 Provisional Reject 1 Provisional Accept 2 0 1
4 ID004 Provisional Reject 2 Provisional Accept 1 0 2
5 ID005 Accepted Elsewhere 3 Provisional Accept 1 1 2
【问题讨论】:
-
看看
dplyr::case_when。看来这就是您所需要的。
标签: r for-loop if-statement