如何使用模式列表在列中查找字符串并将匹配的模式添加到下一列的同一行
How to find a string in a column using a list of patterns and add the matched pattern to the same row in next column
我有一个包含 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
谢谢
我们可以使用 str_remove
来匹配 .
后跟一个或多个不是 .
的字符,直到字符串的末尾 ($
)
library(stringr)
df1 %>%
mutate(Category = str_remove(Sample, "\.[^.]+$"))
和base R
df$Category <- sub("\.[^.]+$", "", df1$Sample)
我们可以使用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))
我有一个包含 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
谢谢
我们可以使用 str_remove
来匹配 .
后跟一个或多个不是 .
的字符,直到字符串的末尾 ($
)
library(stringr)
df1 %>%
mutate(Category = str_remove(Sample, "\.[^.]+$"))
和base R
df$Category <- sub("\.[^.]+$", "", df1$Sample)
我们可以使用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))