Разделить один ряд на два
Я хотел бы получить разделить каждую строку кадра данных на две части. Это мой вклад:
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)