Одним из решений является чтение данных через read.table()
, но с помощью аргумента fill = TRUE
для заполнения строк меньшим количеством «записей», преобразования результирующего фрейма данных в список, а затем очистки «пустых» элементов..
Сначала прочитайте ваш фрагмент данных в:
con <- textConnection("path1 gene1 gene2
path2 gene3 gene4 gene5 gene6
path3 gene7 gene8 gene9
")
dat <- read.table(con, fill = TRUE, stringsAsFactors = FALSE)
close(con)
Затем мы опускаем первый столбец, сначала сохраняя его для имен списка позже
nams <- dat[, 1]
dat <- dat[, -1]
Преобразование фрейма данных в список.Здесь я просто разделил фрейм данных по индексам 1,2, ..., n, где n - количество строк:
ldat <- split(dat, seq_len(nrow(dat)))
Очистить пустые ячейки:
ldat <- lapply(ldat, function(x) x[x != ""])
Наконец, примените имена
names(ldat) <- nams
Предоставление:
> ldat
$path1
[1] "gene1" "gene2"
$path2
[1] "gene3" "gene4" "gene5" "gene6"
$path3
[1] "gene7" "gene8" "gene9"