我有这个示例数据框
df<-data.frame(old_farm=c("Yes", "Yes","Yes", "No", "No", "No", NA ),
env_year=c(2011, 2020,2019,2010,2010,2010, NA),
global_M=c("Yes", "Yes", "No", "Yes","Yes", "No",NA ),
audit_year=c(2014, NA,NA,2010,NA,NA, NA))
df
old_farm env_year global_M audit_year
1 Yes 2011 Yes 2014
2 Yes 2020 Yes NA
3 Yes 2019 No NA
4 No 2010 Yes 2010
5 No 2010 Yes NA
6 No 2010 No NA
7 <NA> NA <NA> NA
我想要得到这个输出 df_N,它与前一个 df 相同,并添加了最后一列“情况”
df_N<-df<-data.frame(old_farm=c("Yes", "Yes","Yes", "No", "No", "No" , NA ),
env_year=c(2011, 2020,2019,2010,2010,2010, NA),
global_M=c("Yes", "Yes", "No", "Yes","Yes", "No", NA ),
audit_year=c(2014, NA,NA,2010,NA,NA,NA),
Situation=c("New costat 2011, Closed antex 2014",
"New costat 2020",
"New costat 2019",
"Closed antex 2010",
"missing entry",
"Full exit", "Not at all"))
df_N
old_farm env_year global_M audit_year Situation
1 Yes 2011 Yes 2014 New costat 2011, Closed antex 2014
2 Yes 2020 Yes NA New costat 2020
3 Yes 2019 No NA New costat 2019
4 No 2010 Yes 2010 Closed antex 2010
5 No 2010 Yes NA missing entry
6 No 2010 No NA Full exit
7 <NA> NA <NA> NA Not at all
关于如何创建情况列的解释:
第一行:当 old_farm=Yes AND global_M=Yes AND I 在 audit_year 列中有一个非 NA 值时,在情况列中,在这种情况下我们必须始终有“New costat”和“Closed antex”,我们只需在“New costat”旁边的“env_year”列中添加 2011 年,在“Closed antex”旁边的“audit_year”列中添加 2014 年。
第二行:当 old_farm=Yes AND global_M=Yes AND I 在 audit_year 列中有一个 -NA 值时,在情况列中,在这种情况下我们必须始终有““New costat”,我们只需从“New costat”旁边的“env_year”列中添加 2020 年即可。
第三行:当 old_farm=Yes AND global_M=No AND 我在 audit_year 列中有一个 -NA 值,那么在情况列中,在这种情况下我们必须始终有““New costat”,我们只需从“New costat”旁边的“env_year”列中添加 2019 年即可。
第四行:当 old_farm=No AND global_M=Ye AND I 在 audit_year 列中有一个非 NA 值,那么在情况列中,在这种情况下我们必须始终有“Closed antex”,我们只需在“Closed antex”旁边的“audit_year”列中添加 2010 年即可。
第五行:当 old_farm=No AND global_M=Yes AND 我在 audit_year 列中有一个 NA 值时,在情况列中,我们必须始终有“缺失条目”
第六行:当 old_farm=No AND global_M=No AND 我在 audit_year 列中有一个 NA 值时,则在情况列中,我们必须始终有“完全退出”。最后一行是不言自明的。
我怀疑我们可以使用应用函数,但我不确定如何做到这一点。
实际上,我有数千行这样的行,其中重复了这 7 个条件,因此通用代码会很方便
您可以使用
dplyr::case_when()
来控制将哪些值分配给新的“情况”列。该dplyr::mutate()
函数创建新列。.default = NA
如果 中的任何条件均不case_when()
满足,则将返回 NA。这对你的样本数据集有效,但通常情况下(双关语),可能会出现数据输入错误,其中 old_farm 和 global_M 列中的“是”和“否”字符串不一致。为了解决这个问题,你可以使用类似以下方法
tolower()
: