我试图在包含一个原始列元素的数据框架中创建新列,并尝试了使用sapplyc和解嵌套的各种方法,但没有得到正确的结果。感兴趣的列是:df<-data_frame(file=c('U2_pN_Len', 'MM_pND_con', 'COS_CTL'))
我想把_之间的部分分离到它们各自的列中。我尝试通过制作参考数据帧:df2<-data_frame(cell=c('U2', 'MM', 'COS'), insert=c('pND', 'pN', 'pGFP'), trt=c('Len', 'con', 'CTL'))
,并考虑使用if命令,如果原始数据帧的一个方面与df2的每列的某些方面相匹配,那么它将打印该匹配,即我希望我的最终数据帧看起来像:
out<-data_frame(file=c('U2_pN_Len', 'MM_pND_con', 'COS_CTL'), cell=c('U2', 'MM', 'COS'), insert=c('pND', 'pN', 'pGFP'), trt=c('Len', 'con', 'CTL'))
谁有任何建议,如何做到这一点使用任何命令?
在这种方法中,df2中的每一列都成为str_extract
中要检查的一组术语。根据数据集中实际列表的大小,这可能会变得笨拙。
library(tidyverse)
df<-tibble(file=c('U2_pN_Len', 'MM_pND_con', 'COS_CTL'))
df2<-tibble(cell=c('U2', 'MM', 'COS'), insert=c('pND', 'pN', 'pGFP'), trt=c('Len', 'con', 'CTL'))
cell = str_c(df2$cell, collapse = "|")
insert = str_c(df2$insert, collapse = "|")
trt = str_c(df2$trt, collapse = "|")
df %>%
mutate(cell = str_extract(file, cell),
insert = str_extract(file, insert),
trt = str_extract(file, trt))
#> # A tibble: 3 × 4
#> file cell insert trt
#> <chr> <chr> <chr> <chr>
#> 1 U2_pN_Len U2 pN Len
#> 2 MM_pND_con MM pND con
#> 3 COS_CTL COS <NA> CTL
创建于2022-12-09与reprex v2.0.2