r - 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
你能写信告诉我如何解决这个问题吗?提前致谢。
解决方案
我们可以rowSums
在选定的列上使用。
cols <- grep('var_1\\.', names(df))
df$Var1[rowSums(!is.na(df[cols])) > 0] <- 'Yes'
推荐阅读
- jenkins - 如何使用 Jenkins 声明式管道将构建变量作为属性传递给 MSBuild?
- r - 从 stargazer 顶部摆脱“table.1”
- javascript - SetInterval 被多次调用
- sql-server - 修改 SQL 表中的现有小数位
- python - CNN对象定位
- google-apps-script - 无法使用 Apps 脚本从团队云端硬盘中删除文件
- javascript - Setting cookie in iframe when using safari
- python - Fastest way to draw pixels to screen in python
- xslt - 使用 XSLT 移动和重命名 KML 节点
- python - Python绘制条形图求和一列,按两个不同的列分组