将具有不同数量元素的列表转换为数据框

时间:2016-01-29 16:54:16

标签: r list dataframe

我正在尝试通过将数据框与列表组合来创建数据框。问题是列表的每个元素长度不同。我读了这个链接:http://www.r-bloggers.com/converting-a-list-to-a-data-frame/,我正好需要四个示例,但我希望自动化命名行的过程。我需要命名超过100行,我不想明确地命名它们。

example <- list("a", c("b", "c"), c("d", "e", "f"))

应如下所示:

row1 | a <NA> <NA>
row2 | b  c   <NA>
row3 | d  e    f

2 个答案:

答案 0 :(得分:1)

我们可以使用stri_list2matrixlist转换为matrix。它会为NA元素填充listlength元素,其max长度小于list中的library(stringi) stri_list2matrix(example, byrow=TRUE) # [,1] [,2] [,3] #[1,] "a" NA NA #[2,] "b" "c" NA #[3,] "d" "e" "f" 长度。

base R

或另一个选项来自length,我们将list指定为最大长度,从而为sapply元素填充NA,使其长度更短。我们使用list,以便simplify元素长度相等时,matrixt(sapply(example, `length<-`, max(lengths(example)))) # [,1] [,2] [,3] #[1,] "a" NA NA #[2,] "b" "c" NA #[3,] "d" "e" "f"

data.frame

注意:此处未使用任何包...如果您需要as.data.frame,请使用installed UBUNTU 14.04 installed HADOOP 2.7.1 version installed SQOOP 1.4.6 version installed XAMPP 7.0.1 version (for mysql) installed HIVE 1.2.1 Trying to import data to HIVE by using below SQOOP command. SQOOP Command example 包装输出。

答案 1 :(得分:1)

将每个列表组件转换为"ts"类对象,cbind将它们转换为"mts"类对象(这将填充NA),并转置给出一个字符矩阵{{1 }}。设置行名称。最后将其转换为数据框。没有包使用。

mat

,并提供:

mat <- t(do.call(cbind, Map(ts, example)))
rownames(mat) <- paste0("row", seq_along(example)) ##
DF <- as.data.frame(mat, stringsAsFactors = FALSE) ###

注意:要求提供数据框和行名称的问题;但是,如果不需要行名称,则省略标记为##的行,如果字符矩阵足够,则省略标记为###的行。

更新修复了stringsAsFactors的拼写问题。也是一点点简化,添加Note。