Как объединить неправильное количество столбцов в один в R - PullRequest
0 голосов
/ 21 июня 2020

введите описание изображения здесь

У меня есть файл данных, который нужно привести в порядок. Я хочу, чтобы все, от Mfb до [gbkey = CDS], было объединено в один столбец. Кроме того, строка, заключенная в двойные кавычки, должна быть разделена на отдельные столбцы с помощью разделителя точки с запятой. количество столбцов, на которые нужно разбить строку, нерегулярно во всем файле. его просто нужно разделить на разделитель.

1 Ответ

0 голосов
/ 21 июня 2020

Некоторые мысли, не уверен, как они будут работать.

# somefile <- readLines("somefile.dat")
somefile <- c(
  'MfB...[dbkey=CDS]"HEAT_2 :HEAT_2 :"',
  'MfB...[dbkey=CDS]"NO_DOMAIN"'
)

gsub('^([^"]*).*', '\\1', somefile)
# [1] "MfB...[dbkey=CDS]" "MfB...[dbkey=CDS]"
gsub('^[^"]*"(.*)".*', '\\1', somefile)
# [1] "HEAT_2 :HEAT_2 :" "NO_DOMAIN"       
splits <- strsplit(gsub('^[^"]*"(.*)".*', '\\1', somefile), "\\s*:\\s*")
splits
# [[1]]
# [1] "HEAT_2" "HEAT_2"
# [[2]]
# [1] "NO_DOMAIN"
dat <- do.call(rbind.data.frame,
               c(lapply(splits, `length<-`, max(lengths(splits))),
                 list(stringsAsFactors = FALSE)))
names(dat) <- paste0("V", seq_along(dat))
dat$V0 <- gsub('^([^"]*).*', '\\1', somefile)
dat
#          V1     V2                V0
# 1    HEAT_2 HEAT_2 MfB...[dbkey=CDS]
# 2 NO_DOMAIN   <NA> MfB...[dbkey=CDS]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...