У меня есть эта таблица (Данные1) с четырьмя колоннамиРазделение строки в каждом столбце несколько столбцов
SNP rs6576700 rs17054099 rs7730126
sample1 G-G T-T G-G
мне нужно разделить столбцы 2-4 на две колонки каждый, так что новый выход имеет 7 столбцов. Например:
SNP rs6576700 rs6576700 rs17054099 rs17054099 rs7730126 rs7730126
sample1 G G T T C C
С помощью следующей функции я мог разделить все столбцы в то время, но результат не то, что мне нужно.
split <- function(x){
x <- as.character(x)
strsplit(as.character(x), split="-")
}
data2=apply(data1[,-1], 2, split)
data2
$rs17054099
$rs17054099[[1]]
[1] "T" "T"
$rs7730126
$rs7730126[[1]]
[1] "G" "G"
$rs6576700
$rs6576700[[1]]
[1] "C" "C"
В Stack Overflow я нашел способ, чтобы преобразовать выход strsplit в dataframe но числа RS в строках не в столбцах (я получил аналогичный вывод с другими методами в этой теме strsplit by row and distribute results by column in data.frame)
> n <- max(sapply(data2, length))
> l <- lapply(data2, function(X) c(X, rep(NA, n - length(X))))
> data.frame(t(do.call(cbind, l)))
t.do.call.cbind..l..
rs17054099 T, T
rs7730126 G, G
rs2061700 C, C
Если я не использую функцию транспонирования (... (т (do.call ...), выходной список, который я не могу записать в файл.
Я хотел бы иметь раствор в R, чтобы сделать его частью трубопровода.
Я забыл сказать, что мне нужно применить это к миллиону столбцов.
Как вы планируете провести различие между столбцами с таким же именем? -hint: Вы не можете. Во-первых, вам нужно определить имена явных столбцов. – N8TRO
В конце я не буду использовать заголовок. Я хочу сохранить его в первую очередь, чтобы быть уверенным в порядках SNP. Я могу добавить rs17054099.1 и rs17054099.2. Мне нужно создать файл plink ped, поэтому я добавлю информацию каждого образца (FID, IDD и т. Д.). Благодарим вас за интерес к моему вопросу. Sami – Sami
Хорошо, спасибо за предложение. Если порядок столбцов не изменяется, заголовок не важен. – Sami