Объедините CSV-файлы в 1 с разными столбцами - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть 3 больших файла CSV (OCA1 = 3649 наблюдений, 521 переменная, OCA2 = 3772 наблюдения, 2513 переменных, OCA3 = 878 наблюдений, 2513 переменных).Я хочу объединить их в 1 CSV-файл в R. Меня беспокоит только то, что у них разные столбцы, однако первые 10 столбцов для каждого файла одинаковы.Вот пример:

ОСА1: enter image description here

ОСА2: enter image description here

Как видите,до «Формат» имена столбцов совпадают.Я хотел бы, чтобы желаемый результат выглядел следующим образом:

#CHROM      POS    ID   REF  ALT  QUAL   FILTER   INFO  FORMAT  NA06984  NA006985  HG00096  HG00097
   11      891...  rs..  A   G    100      PASS    ..    GT       0|0    0|0
   11      891...  rs..  A   G    100      PASS    ..    GT                       0|0    0|0

Где столбцы после «Формат» из OCA2 добавляются в OCA1, а строки из OCA2 добавляются после последнего наблюдения OCA1 (3649).

Сначала я попробовал rbind, но из-за столбцов боролся.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Может быть, вы можете создать столбцы NA для отсутствующих, а затем выполнить команду rbind

df_l = list(df1 = data.frame('A'=rep("f1",10),'B'=runif(10),'C'=seq(1:10)),
            df2 = data.frame('A'=rep("f2",20),'B'=runif(20),'D'=paste0("X",seq(1:20))),
            df3 = data.frame('A'=rep("f3",30),'C'=seq(1:30),'D'=paste0("Y",seq(1:30))))
all_names = unique(c(colnames(df_l[['df1']]),
                     colnames(df_l[['df2']]),
                     colnames(df_l[['df3']]))) 

for (i in names(df_l)) {
  abs_col = all_names[!all_names %in% names(df_l[[i]])]
  if(length(abs_col) > 0) df_l[[i]][,abs_col] <- NA
} ; rm(i)

do.call("rbind", df_l)
0 голосов
/ 03 апреля 2019

bind_rows из dplyr может помочь связать наборы данных с различным количеством столбцов. Вот пример:

library(dplyr)

OCA1 <- data_frame(
  x = 1:3
)

OCA2 <- data_frame(
  x = 1:5,
  y = letters[1:5]
)

OCA3 <- data_frame(
  x = 1:10,
  y = letters[1:10],
  z = LETTERS[1:10]
)

df <- bind_rows(
  OCA1,
  OCA2,
  OCA3
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...