繁体   English   中英

在 R 中定义新参数,条件是多个列以相同的名称开头(结合 mutate、ifelse 和 starts_with)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM