[英]Create a new column using mutate_at() in R
i'm trying to do some modifications to the next data frame:我正在尝试对下一个数据框进行一些修改:
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")
)
And i'm using mutate_at(
) from dplyr
package to create a new column calling "type".我正在使用dplyr
package 中的mutate_at(
) 创建一个名为“type”的新列。 That column can change depending of a list of characters that can appear in the columns of my data frame ("name_mat" and "details").该列可以根据我的数据框列中出现的字符列表(“name_mat”和“details”)而改变。 The code is:代码是:
df <- df %>% mutate_at(vars(one_of("Name_mat ","details")),
funs(case_when( "FAM|FRA" == TRUE ~ "FA",
"CM|COMPRIMIDO" == TRUE~ "COM",
"SOL"== TRUE~"SOL",
"CP|CAPSULA"== TRUE~"CAP",
TRUE ~ "bad_mat")))
My first time using mutate_at and i don't know how to create a new column calling "type" in my data frame "df".我第一次使用 mutate_at,但我不知道如何在我的数据框“df”中创建一个名为“type”的新列。 Finally i need something like:最后我需要类似的东西:
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
I appreciate any help or any other point of view about how to do this.我感谢有关如何执行此操作的任何帮助或任何其他观点。
Thanks!谢谢!
try to do it this way尝试这样做
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"))
We can also use我们也可以使用
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 = .)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.