如何使用 mutate 和 for 循环创建新列?

时间:2021-02-02 02:37:35

标签: r for-loop mutate

我尝试了以下方法:

pathogens <- c("Adenovirus", "Coronavirus NL63", "Coronavirus HKU1", "Coronavirus 229E", "Coronavirus       OC43", "Human Metapneumovirus", "Human Rhinovirus/Enterovirus", "Influzena A", "Influzena A/H1", "Influzena A/H3", "Influzena A/H1-2009", "Influzena B", "Parainfluenza Virus 1", "Parainfluenza Virus 2", "Parainfluenza Virus 3", "Parainfluenza Virus 4", "Respiratory Syncytial", "Bordetella parapertussis", "Bordetella pertussis", "Chlamydia pneumoniae", "Mycoplasma pneumoniae")
               
for (value in pathogens) {
  df_nphl_combined2 <- df_nphl_combined %>%
    mutate(!!value := if_else(str_detect(Results, value),1,0))
  print(value)
}

这样做只会在我的数据框中添加一列,其中包含最后一个病原体。

我的目标是遍历数据框的结果列并使用 str_detect 查找每个病原体,然后创建一个列,如果患者有该病原体,则为 1,如果患者没有,则为 0。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用 map 为每个 pathogens 创建新列。试试

library(tidyverse)

df_nphl_combined2 <- bind_cols(df_nphl_combined, 
                        map_dfc(pathogens, 
                       ~df_nphl_combined %>% 
                         transmute(!!.x := as.integer(str_detect(Results, .x)))))