根据r中的其他列在dataframe中创建新列



我使用的数据是这样的:

data
Subject    Cluster
A          1
B          1
C          2
D          3
E          2
F          1
G          3
H          3
I          4
J          4
K          5
L          6
M          7
N          5
O          3

基于列簇,我想创建一个新的列,叫做Verdict,如果科目通过,需要补习,或者不及格,它包含注释。

如果受试者在:

*Cluster 1或3,他们失败了

*集群2或5,他们需要补救

*集群4或6或7,他们通过了

最终的数据看起来像这样

data
subject    cluster    verdict
A          1          Failed
B          1          Failed
C          2          Remedial
D          3          Failed
E          2          Remedial
F          1          Failed
G          3          Failed
H          3          Failed
I          4          Passed
J          4          Passed
K          5          Remedial
L          6          Passed
M          7          Passed
N          5          Remedial
O          3          Failed

我已经尝试过使用简单的代码,如:

data$verdict = 
ifelse(data$cluster == 1|data$cluster == 3,'Failed',
ifelse(data$cluster == 2|data$cluster == 5,'Remedial','Passed'))

它起作用了。但我觉得效率不高,特别是当我有大量的集群和/或判决时。有没有更有效的方法?

不要用==,试试用%in%,试试用case_when

data %>%
mutate(verdict = case_when(
cluster %in% c(1,3) ~ "Failed",
cluster %in% c(2,5) ~ "Remedial",
TRUE ~ "Passed"
))

最新更新