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

Posted

技术标签:

【中文标题】dplyr 变异()。变异一个变量的问题,取决于匹配由matches()选择的特定名称的其他列中的非缺失值【英文标题】:dplyr mutate(). Problem with mutating one variable, in dependence on non-missing value in other columns matching specific names selected by matches() 【发布时间】:2020-09-03 04:58:13 【问题描述】:

我正在尝试改变一个变量,这取决于多个其他变量中的非缺失值。有一些变量,对应于问题是否提供了测试(让他们称之为 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 你能写信告诉我如何解决这个问题吗?提前致谢。

【问题讨论】:

if_else(!is.na(matches("column_names")) 不是有效的语法。你能解释一下你想要做什么吗?可能包含一些数据并显示预期输出。 亲爱的 Ronak,感谢您的回复。 亲爱的 Ronak,感谢您的回复。我有一个从医学数据库中检索到的数据框。有一些变量,对应于问题是否提供了测试(我们称它们为 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”对这些观察结果表示“是”。 【参考方案1】:

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

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

【讨论】:

亲爱的 Ronak,再次非常感谢您。对不起,如果我不是很清楚。我想根据 var_1.1:var_1.3 中的非缺失值将 var_1 中的“NA”和“No”替换为“Yes”,保持 var_1.1:var_1.3 中的变量不变。 @JakhongirAlidjanov 你能用一个小例子更新你的帖子并显示它的预期输出吗? 一般来说,我试图使以下内容更优雅和更短:df%&gt;% 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)) 我已经更新了答案。请检查这是否是您想要的。最好显示一个数据示例以避免在 cmets 中扩展说明。请阅读有关how to ask a good question 的信息以及如何提供reproducible example。 亲爱的 Ronak,我已经更新了帖子,添加了一些说明和图片。

以上是关于dplyr 变异()。变异一个变量的问题,取决于匹配由matches()选择的特定名称的其他列中的非缺失值的主要内容,如果未能解决你的问题,请参考以下文章

合并或变异摘要 (dplyr)

R dplyr 在列索引上发生变异

带有 dplyr 的用户定义函数 - 变异列是一个参数

dplyr 使用条件列和特定行进行变异

R中dplyr包中变异函数的奇怪行为

当我在`dplyr`之后加载`plyr`时,为啥汇总或变异不适用于group_by?