R:根据另一列中的模式为一列分配值

问题描述 投票:0回答:1

我有以下数据框:

Sample <- data.frame(Sample_Name=c('502B_BCD_0TBC','0102_PER_2TBC', '0302_COR_0TBC', '0500_LN_TGHV'))<br />

我想根据多个条件创建一个“Sample_Type”列:
如果 Sample_Name 包含“B_”或“_BLO”,则 Sample_Type 应为“BLO”
如果 Sample_Name 具有“PER”,则 Sample_Type 应为“PER”
如果 Sample_Name 具有“COR”,则 Sample_Type 应为“COR”
如果 Sample_Name 具有“LN”,则 Sample_Type 应为“LN”
如果 Sample_Name 不是上述任何一个,则 Sample_Type 应为 'OTH'

或者类似图片的东西。

如何实现?

enter image description here

r if-statement conditional-statements assign
1个回答
0
投票

我想你可以用正则表达式来完成这一切:

library(tidyverse)

Sample %>%
  mutate(code = str_replace_all(Sample_Name,
                                c("^(.*)(B_|_BLO_)(.*)$", "^(.*)(_PER_)(.*)$", 
                                  "^(.*)(_COR_)(.*)$", "^(.*)(_LN)(.*)$"),
                                c("BLO", "PER", "COR", "LAN")),
         code = ifelse(code %in% c("BLO", "PER", "COR", "LAN"), code, "Other"))
#>     Sample_Name code
#> 1 502B_BCD_0TBC  BLO
#> 2 0102_PER_2TBC  PER
#> 3 0302_COR_0TBC  COR
#> 4  0500_LN_TGHV  LAN
© www.soinside.com 2019 - 2024. All rights reserved.