Как найти строку в столбце, используя список шаблонов, и добавить соответствующий шаблон в ту же строку в следующем столбце - PullRequest
0 голосов
/ 24 марта 2020

У меня есть фрейм данных с образцами 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

Спасибо

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Мы можем использовать 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 голосов
/ 24 марта 2020

Мы можем использовать str_remove для сопоставления ., за которым следует один или несколько символов, которые не являются . до конца ($) строки

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

С base R

df$Category <- sub("\\.[^.]+$", "", df1$Sample)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...