如何操作数据集,以便如果变量提供特定输出,则后续变量必须提供相同输出?
我们认为VAR1_2013
和VAR1_2014
属于同一变量,分别在2013年和2014年测得。 VAR2_2013
和VAR2_2014
是另一组变量,也分别在2013年和2014年进行了度量。
我想编写一个代码,使得如果较早的度量(即VAR1_2013
和VAR2_2013
记录为“是”,则随后的测量也必须为“是”)。否则,我们将其保留不变。
问题是我有6个变量x 6年,这意味着要操作36个变量。
数据:
df <- read.table(text ="
ID VAR1_2013 VAR2_2013 VAR1_2014 VAR2_2014
1 YES NO NO NO
2 NO NO NO YES
3 NA YES NO NO
4 NO YES NA NA", header = TRUE, stringsAsFactors = FALSE)
我运行了以下代码,但显然,它不可伸缩。
代码:
library(dplyr)
df %>%
mutate(VAR1_2014 = if_else(!is.na(VAR1_2013) & VAR1_2013 == "YES", "YES", VAR1_2014),
VAR2_2014 = if_else(!is.na(VAR2_2013) & VAR2_2013 == "YES", "YES", VAR2_2014))
# ID VAR1_2013 VAR2_2013 VAR1_2014 VAR2_2014
# 1 1 YES NO YES NO
# 2 2 NO NO NO YES
# 3 3 <NA> YES NO YES
# 4 4 NO YES <NA> YES
答案 0 :(得分:1)
我相信以下内容可以满足您的需求并且可以扩展。
nm <- names(df)[-1]
vr <- unique(sapply(strsplit(nm, "_"), '[[', 1))
for(v in vr){
s <- grep(v, nm, value = TRUE)
i <- !is.na(df[[ s[1] ]]) & df[[ s[1] ]] == "YES"
df[[ s[-1] ]][i] <- df[[ s[1] ]][i]
}
df
# ID VAR1_2013 VAR2_2013 VAR1_2014 VAR2_2014
#1 1 YES NO YES NO
#2 2 NO NO NO YES
#3 3 <NA> YES NO YES
#4 4 NO YES <NA> YES