Разделить один ряд на два

Я хотел бы получить разделить каждую строку кадра данных на две части. Это мой вклад:

input <- 'name sample1 sample2 sample3
              pr_001  533  411    633
              pr_002  478  447  427'  
input <- read.table(text=input, header=T)

Чтобы получить этот вывод:

output <- 'name sample1 sample2 sample3
              pr_001-A  533  411    633
              pr_001-B  533  411   633
              pr_002-A  478  447  427  
              pr_002-B  478  447  427'
 output <- read.table(text=output, header=T)

Таким образом, для pr_001 в sample1 результат - две строки с одинаковым значением pr_001-A а также pr_001-Aи та же логика должна соблюдаться для всех образцов и имен. Какая-то идея иметь дело с этим? Спасибо!

2 ответа

Решение

Сначала продублируйте строки с помощью (основываясь на предложении Акруна):

output <- input[rep(1:nrow(input), each = 2),]

Затем добавьте -A а также -B для каждого name с:

output$name <- paste(output$name, c("A", "B"), sep = "-")
library(dplyr)

bind_rows(input %>% 
            mutate(sample1 = paste(sample1, "A", sep = "-"),
          input %>% 
            mutate(sample1 = paste(sample1, "B", sep = "-") ) %>%
  arrange(sample1)  
Другие вопросы по тегам