我正在尝试将嵌套列表结构转换为数据框。该列表类似于以下内容(它是使用 httr 包读取的解析 JSON 的序列化数据)。
myList <- list(object1 = list(w=1, x=list(y=0.1, z="cat")), object2 = list(w=NULL, x=list(z="dog")))
编辑:我原来的示例数据太简单了。实际数据参差不齐,这意味着并非每个对象都存在所有变量,并且某些列表元素为 NULL。我编辑了数据以反映这一点。
unlist(myList)
在递归展平列表方面做得很好,然后我可以lapply
很好地展平所有对象。
flatList <- lapply(myList, FUN= function(object) {return(as.data.frame(rbind(unlist(object))))})
最后,我可以使用plyr::rbind.fill
myDF <- do.call(plyr::rbind.fill, flatList)
str(myDF)
#'data.frame': 2 obs. of 3 variables:
#$ w : Factor w/ 2 levels "1","2": 1 2
#$ x.y: Factor w/ 2 levels "0.1","0.2": 1 2
#$ x.z: Factor w/ 2 levels "cat","dog": 1 2
问题是 w 和 xy 现在被解释为字符向量,默认情况下它们被解析为数据帧中的因子。我相信这unlist()
是罪魁祸首,但我想不出另一种递归展平列表结构的方法。一种解决方法是对数据帧进行后处理,然后分配数据类型。确定向量是有效数字向量还是整数向量的最佳方法是什么?