Индекс списка по номеру и некоторый элемент NULL, как преобразовать во фрейм данных? - PullRequest
0 голосов
/ 30 октября 2018

В программе R длина списка неизвестна. Она генерируется из цикла for. например:

ls <- list()
ls[[1]] <- 5
ls[[3]] <- a
ls[[6]] <- 8
....

Некоторый индекс (порядковый номер) не определен.

Я хочу преобразовать во фрейм данных, например:

1  5
2  NA
3  a
4  NA
5  NA
6  8
...

Дополнительный вопрос: как получить диапазон порядковых номеров этого списка?

1 Ответ

0 голосов
/ 30 октября 2018

Можно использовать базовый подход R, предполагая, что здесь у вас есть "ls", уже присутствующий в среде:

Объяснение : Сначала мы перебираем все элементы, используя lapply. В части с анонимной функцией мы пытаемся найти нулевые значения, и там, где есть нулевое значение, мы заменяем на NA. Как только значения NULL в списке заменены на NA, мы связываем их по строкам, используя 'rbind' из do.call. Чтобы получить последнюю часть как последовательность, мы можем использовать либо функцию seq, либо оператор двоеточия для создания последовательности.

 dfs <- data.frame(col1 = do.call('rbind', lapply(ls, 
                      function(x)ifelse(is.null(x), NA, x))), 
                              col2 = seq(1,length(ls)), stringsAsFactors = F)

Альтернатива Использование unlist (вместо do.call и rbind):

dfs <- data.frame(col1 = unlist(lapply(ls, 
                function(x)ifelse(is.null(x), NA, x))), col2 = 
                        seq(1,length(ls)), stringsAsFactors = F)

выход

    > dfs
   #   col1 col2
   # 1    3    1
   # 2   NA    2
   # 3    6    3
   # 4   NA    4
   # 5   NA    5
   # 6    8    6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...