首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种方法可以根据另一列上的另一个多个条件添加多个列(并编辑值)?

是否有一种方法可以根据另一列上的另一个多个条件添加多个列(并编辑值)?
EN

Stack Overflow用户
提问于 2022-02-08 10:15:10
回答 1查看 19关注 0票数 0

我正在编制不同国家疫苗接种记录的数据集。我想在各国使用的不同疫苗中添加多个栏,标明1或0。

dataset“疫苗”列的预览

代码语言:javascript
复制
list_4 
OUTPUT
[1] "Pfizer/BioNTech"    "Sputnik V"          "Oxford/AstraZeneca" "Moderna"            "Sinopharm/Beijing"  "Sinovac"            "Sinopharm/Wuhan"   
 [8] "Covaxin"            "EpiVacCorona"       "Johnson&Johnson"   
[1] "character"

我能够用下面的代码(硬编码)实现(最终结果),是否有任何方法通过直接使用list_4来实现相同的结果?

代码语言:javascript
复制
data_6 <- data_5 %>% 
  mutate("Pfizer/BioNTech" = ifelse(str_detect(vaccines, "Pfizer/BioNTech"), 1, 0)) %>%
  mutate("Sputnik V" = ifelse(str_detect(vaccines, "Sputnik V"), 1, 0)) %>%
  mutate("Oxford/AstraZeneca" = ifelse(str_detect(vaccines, "Oxford/AstraZeneca"), 1, 0)) %>%
  mutate("Moderna" = ifelse(str_detect(vaccines, "Moderna"), 1, 0)) %>%
  mutate("Sinopharm/Beijing" = ifelse(str_detect(vaccines, "Sinopharm/Beijing"), 1, 0)) %>%
  mutate("Sinovac" = ifelse(str_detect(vaccines, "Sinovac"), 1, 0)) %>%
  mutate("Sinopharm/Wuhan" = ifelse(str_detect(vaccines, "Sinopharm/Wuhan"), 1, 0)) %>%
  mutate("Covaxin" = ifelse(str_detect(vaccines, "Covaxin"), 1, 0)) %>%
  mutate("EpiVacCorona" = ifelse(str_detect(vaccines, "EpiVacCorona"), 1, 0)) %>%
  mutate("Johnson&Johnson" = ifelse(str_detect(vaccines, "Johnson&Johnson"), 1, 0))
EN

回答 1

Stack Overflow用户

发布于 2022-02-08 10:29:25

也许OP正在寻找一种方法来获得虚拟的大肠杆菌,以判断给定的疫苗是否存在于每一行所包含的疫苗载体中。

小型reprex

代码语言:javascript
复制
strings <- c('Oxford/AstraZeneca, Sputnik V', 'Moderna, Oxford/AstraZeneca')
vaccines <- c('Oxford/AstraZeneca', 'Sputnik V', 'Moderna')
df <- tibble(strings)

df

# A tibble: 2 × 1
  strings                      
  <chr>                        
1 Oxford/AstraZeneca, Sputnik V
2 Moderna, Oxford/AstraZeneca  

答案

代码语言:javascript
复制
library(purrr)
library(dplyr)
library(stringr)

df %>%
        mutate(map_dfc(vaccines, ~+str_detect(strings, .x)) %>%
                       set_names(vaccines))

# A tibble: 2 × 4
  strings                       `Oxford/AstraZeneca` `Sputnik V` Moderna
  <chr>                                        <int>       <int>   <int>
1 Oxford/AstraZeneca, Sputnik V                    1           1       0
2 Moderna, Oxford/AstraZeneca                      1           0       1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71032106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档