[英]Define new parameter in R conditional on multiple columns starting with the same name (combine mutate, ifelse and starts_with)
在我的数据集中,我有指示疾病存在的列; 每列都以相同的字母开头:
"meta_var1" "meta_var2" "meta_var3" "meta_var4" "meta_var5"
我想根据这些 meta_var_parameters 中的任何一个是否包含某个值来定义一个新参数(换句话说:如果任何参数 meta_var1:meta_var10 包含 x,则 new_var == 1,否则 new_var == 0)
以下代码一次适用于一列:
data <- mutate(data, liver_met = ifelse(str_detect(meta_var1, "C220"), 1, 0))
Output:
table(data$liver_met)
0 1
10330 1199
我正在寻找的是一次搜索所有列的代码; 我试过这个例如:
data <- mutate(data, liver_met = ifelse(str_detect(data[,31:40], "C220"), 1, 0))
这会产生以下错误
argument is not an atomic vector; coercingError in `mutate()`:
! Problem while computing `liver_met = ifelse(str_detect(data[, 31:40], "C220"), 1, 0)`.
x `liver_met` must be size 11529 or 1, not 10.
我理解这个错误代码,但无法找出一个解决方案,它会依次检查每个列值(而不是列名本身)。 有任何想法吗?
如果我们想在多列上运行它,使用if_any
循环遍历感兴趣的列 ( 31:40
),检查每一列中的 substring “C220”,如果特定行的任何列返回TRUE
为 TRUE,用+
将逻辑强制转换为二进制
library(dplyr)
library(stringr)
data %>%
mutate(liver_met = +(if_any(31:40, ~ str_detect(.x, "C220"))))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.