Функция преобразования списков разной длины в фрейм данных с использованием утилизации - PullRequest
2 голосов
/ 19 июня 2020

Я пытаюсь создать фрейм данных с несколькими областями, в которых строки равны самому длинному массиву в списке. Другие массивы в списке затем перерабатывают элементы, пока они не достигнут наибольшего числа. Я должен сделать это очень специфическим c способом, используя отдельные функции для каждой.

DF <- function(x) {
  maxLength <- listMax(x)
  newList <- listExtend(x,maxLength)
  finalList <- data.frame(newList)
  print(finalList)
}

Фрейм данных в моей функции не работает из-за нечетных чисел, которые, как я полагаю, проистекают из newList в функции DF. Я могу использовать один l oop, sapply(), cbind() или rbind() для преобразования векторов и помещения их во фрейм данных, но каждая попытка приводила либо ко всем 1 s, либо к другим вопиющим проблемам.

1 Ответ

2 голосов
/ 19 июня 2020

Проблема в том, что вам нужно применить listExtend к каждому вектору fullList в функции DF.

x <- c(1:7)
y <- c("a","b","c","d","e")
z <- c(TRUE,TRUE,FALSE,FALSE)
fullList <- list(x,y,z)


DF <- function(x) {
  maxLength <- max(lengths(x))
  newList <- lapply(x, function(l) rep(l, length.out = maxLength))
  finalDF <- data.frame(newList)
  return(finalDF)
}


outDF <- DF(fullList)
colnames(outDF) <- c('x', 'y', 'z')
outDF
#------
  x y     z
1 1 a  TRUE
2 2 b  TRUE
3 3 c FALSE
4 4 d FALSE
5 5 e  TRUE
6 6 a  TRUE
7 7 b FALSE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...