在R中使用mutate_at()创建一个新列

在R中使用mutate_at()创建一个新列,r,dplyr,mutate,R,Dplyr,Mutate,我正在尝试对下一个数据帧进行一些修改: df <- data.frame( zgen = c("100003446", "100001749","100002644","100001755"), Name_mat = c("EVEROLIMUS 10 MG CM", "GALSULFASA 5MG/5ML FAM", "IDURSULFASE 2MG/ML SOL. P/INFUSION FAM","IMIGLUCERASA 400U POL. LIOF. FAM"),

我正在尝试对下一个数据帧进行一些修改:

df <- data.frame(
    zgen = c("100003446", "100001749","100002644","100001755"),
    Name_mat = c("EVEROLIMUS 10 MG CM", "GALSULFASA 5MG/5ML FAM", "IDURSULFASE 2MG/ML SOL. P/INFUSION FAM","IMIGLUCERASA 400U POL. LIOF. FAM"),
    details= c("CM", "FAM", "SOL. P/INFUSION FAM","NA")
)
我第一次使用mutate_at,我不知道如何在数据框“df”中创建一个名为“type”的新列。最后,我需要这样的东西:

       ZGEN                                 Name_mat               details   Type
1 100003446                      EVEROLIMUS 10 MG CM                    CM    COM
2 100001749                   GALSULFASA 5MG/5ML FAM                   FAM     FA
3 100002644   IDURSULFASE 2MG/ML SOL. P/INFUSION FAM   SOL. P/INFUSION FAM     FA
4 100001755         IMIGLUCERASA 400U POL. LIOF. FAM                    NA     FA
我感谢任何帮助或任何其他关于如何做到这一点的观点

谢谢

试着这样做

  library(tidyverse)
  library(stringr)

  df %>% mutate(TYPE = case_when(
  str_detect(Name_mat, pattern = "FAM") | str_detect(details, "FRA") ~ "FA",
  str_detect(Name_mat, pattern = "CM") | str_detect(details, "COMPRIMODO") ~ "CM",
  str_detect(Name_mat, pattern = "SOL") ~ "SOL",
  str_detect(Name_mat, pattern = "CP") | str_detect(details, "CAPSULA") ~ "CAP",
  TRUE ~ "bad_mat"))
我们也可以使用

library(dplyr)
library(purrr)
library(stringr)
pat <- "\\b(FAM|FRA|CM|COMPRIMIDO|SOL|CP|CAPSULA)\\b"

nm1 <- setNames(c("FA", "FA", "COM", "COM", "SOL", "CAP", "CAP"),
       c("FAM", "FRA", "CM", "COMPRIMIDO", "SOL", "CP", "CAPSULA"))
df %>% 
     select(Name_mat, details) %>%
     map(str_extract_all, pattern = pat) %>% 
           transpose %>% 
     map_chr( ~ nm1[flatten_chr(.x)][1] ) %>%
     bind_cols(df, Type = .)
库(dplyr)
图书馆(purrr)
图书馆(stringr)
帕特%
映射(str\u extract\u all,pattern=pat)%>%
转置%>%
map_chr(~nm1[flatten_chr(.x)][1])%>%
绑定列(df,类型=)
library(dplyr)
library(purrr)
library(stringr)
pat <- "\\b(FAM|FRA|CM|COMPRIMIDO|SOL|CP|CAPSULA)\\b"

nm1 <- setNames(c("FA", "FA", "COM", "COM", "SOL", "CAP", "CAP"),
       c("FAM", "FRA", "CM", "COMPRIMIDO", "SOL", "CP", "CAPSULA"))
df %>% 
     select(Name_mat, details) %>%
     map(str_extract_all, pattern = pat) %>% 
           transpose %>% 
     map_chr( ~ nm1[flatten_chr(.x)][1] ) %>%
     bind_cols(df, Type = .)