Извлечение символов в кадре данных - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть такой фрейм данных

Sample Marker1 Marker2 Marker 3             
Sample1 230/250 301/302 140/150          
Sample2 233/255 304/306 143/158       
Sample3 221/250 304/310 140/152  

и я бы хотел разделить цифры по обе стороны от знака /, чтобы получить это. Таким образом, каждый столбец будет разделен на 2:

Sample  Marker1a Marker1b Marker2a Marker2b Marker3a Marker3b             
Sample1 230      250      301      302      140      150          
Sample2 233      255      304      306      143      158       
Sample3 221      250      304      310      140      152 

Я пытаюсь использовать список, чтобы сделать это без успеха. Может, у кого-нибудь здесь будет идея получше? Anne-Sophie

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Проверьте библиотеку tidyr и separate

library(tidyr)
df %>% separate(Marker1,c("Marker1a","Marker1b")) %>% separate(Marker2,c("Marker2a","Marker2b")) %>% separate(Marker3,c("Marker3a","Marker3b"))
#   Sample Marker1a Marker1b Marker2a Marker2b Marker3a Marker3b
#1 Sample1      230      250      301      302      140      150
#2 Sample2      233      255      304      306      143      158
#3 Sample3      221      250      304      310      140      152
0 голосов
/ 07 ноября 2018

Вот одно из решений:

# create dataframe
d <- read.table(text='Sample Marker1 Marker2 Marker3             
                Sample1 230/250 301/302 140/150          
                Sample2 233/255 304/306 143/158       
                Sample3 221/250 304/310 140/152 ', 
                header=T, stringsAsFactor=F)

# loop over the Marker columns
for (col in paste0('Marker', 1:3)){

  # create a list of splitted values
  splitted.values <- strsplit(d[[col]], '/')
  # add the first item of each list element to a
  d[[paste0(col, 'a')]] <- sapply(splitted.values, '[', 1)
  # add the second item of each list element to b
  d[[paste0(col, 'b')]] <- sapply(splitted.values, '[', 2)
}

print(d)

   Sample Marker1 Marker2 Marker3 Marker1a Marker1b Marker2a Marker2b Marker3a Marker3b
1 Sample1 230/250 301/302 140/150      230      250      301      302      140      150
2 Sample2 233/255 304/306 143/158      233      255      304      306      143      158
3 Sample3 221/250 304/310 140/152      221      250      304      310      140      152
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...