首页 > 解决方案 > dplyr 变异()。变异一个变量的问题,取决于匹配由matches()选择的特定名称的其他列中的非缺失值

问题描述

我试图改变一个变量,这取决于多个其他变量中的非缺失值。有一些变量,对应于问题是否提供了测试(让他们称之为 var_1),然后是测试的结果(让他们称之为 var_1.1、var_1.2、var_1.3 等)。从逻辑上讲,var_1 中的“No”和“NA”应该表示 var_1.1、var_1.2、var_1.3 等中的“NA”,不是吗?但是一些观察,在 var_1 中带有“No”和“NA”,在 var_1.1、var_1.2、var_1.3 等中具有非缺失值。因此,我想在 var_1 中改变“No”和“NA”对于这些观察结果为“是”。如果你看一下这个数字,我想要的可能会更清楚一些。var_1 中的绿色变量代表正确的值。红色粗体变量不正确。

df%>% mutate(var_1=ifelse(!is.na(var_1.1)| !is.na(var_1.2)| !is.na(var_1.3)| !is.na(var_1.4)| !is.na(var_1.n), "Yes", as.character(var_1))

以下是代码行: df %>% mutate(var_1=if_else(!is.na(matches("var_1.")), "Yes", as.character(var_1)))

df %>% mutate_at(.vars = vars(var_1), .funs=if_else(!is.na(matches("var_1.")), "Yes", as.character(.)))

在这两种情况下,R都会返回错误消息Error: No tidyselect variables were registered你能写信告诉我如何解决这个问题吗?提前致谢。 数字

标签: rdplyr

解决方案


我们可以rowSums在选定的列上使用。

cols <- grep('var_1\\.', names(df))
df$Var1[rowSums(!is.na(df[cols])) > 0] <- 'Yes'

推荐阅读