如何使用模式列表在列中查找字符串,并将匹配的模式添加到下一列的同一行中

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

我有一个包含RNASeq样本,基因符号和表达数据的数据框。我想根据样本类别对它们进行分组。

Sample             Gene     Exp 
---------------------------------
A.56.100e.ax       prk1     3.56
A.100CAS.500e.er   prk1    45.20 
A.300.EFE1.cx      prk1     0.21
A.56.100e.ax       csk     51.50
A.100CAS.500e.er   csk    321.47 
A.300.EFE1.cx      csk    186.78

我想做的是按如下所示在单独的列中添加类别,

Sample             Gene     Exp    Category
-------------------------------------------
A.56.100e.ax       prk1     3.56   A.56
A.100CAS.500e.er   prk1    45.20   A.100CAS
A.300.EFE1.cx      prk1     0.21   A.300
A.56.100e.ax       csk     51.50   A.56
A.100CAS.500e.er   csk    321.47   A.100CAS
A.300.EFE1.cx      csk    186.78   A.300

谢谢

r regex string pattern-matching string-matching
2个回答
0
投票
我们可以使用sub来捕获字符后跟数字。

df$Category <- sub('([A-Z]\\..*?)\\..*', '\\1', df$Sample) df # Sample Gene Exp Category #1 A.56.100e.ax prk1 3.56 A.56 #2 A.100CAS.500e.er prk1 45.20 A.100CAS #3 A.300.EFE1.cx prk1 0.21 A.300 #4 A.56.100e.ax csk 51.50 A.56 #5 A.100CAS.500e.er csk 321.47 A.100CAS #6 A.300.EFE1.cx csk 186.78 A.300

数据

df <- structure(list(Sample = structure(c(3L, 1L, 2L, 3L, 1L, 2L), .Label = c("A.100CAS.500e.er", "A.300.EFE1.cx", "A.56.100e.ax"), class = "factor"), Gene = structure(c(2L, 2L, 2L, 1L, 1L, 1L), .Label = c("csk", "prk1"), class = "factor"), Exp = c(3.56, 45.2, 0.21, 51.5, 321.47, 186.78)), class = "data.frame", row.names = c(NA, -6L))

0
投票
我们可以使用str_remove来匹配.,后跟一个或多个不是.的字符,直到字符串的结尾($

library(stringr) df1 %>% mutate(Category = str_remove(Sample, "\\.[^.]+$"))


带有base R

df$Category <- sub("\\.[^.]+$", "", df1$Sample)

© www.soinside.com 2019 - 2024. All rights reserved.