Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中将列表列表转换为data.frame_R_List_Dataframe - Fatal编程技术网

在R中将列表列表转换为data.frame

在R中将列表列表转换为data.frame,r,list,dataframe,R,List,Dataframe,我正在尝试将列表列表转换为data.frame。我意识到这个问题已经被问了很多次,但我找不到一个适用于我的情况的更早的答案 以下是之前的几篇帖子: 到目前为止,我所看到的最好的答案是Benjamin Christoffersen在上面的第二个链接中给出的,但在我的例子中,每个子列表只有一个值,我缺少观察结果,我的列表中有名称,我希望保留这些名称 以下是我的示例数据集: AA <- list(my.col1 = 1, my.col2 = 4, my.col3 = NULL,

我正在尝试将列表列表转换为
data.frame
。我意识到这个问题已经被问了很多次,但我找不到一个适用于我的情况的更早的答案

以下是之前的几篇帖子:

到目前为止,我所看到的最好的答案是Benjamin Christoffersen在上面的第二个链接中给出的,但在我的例子中,每个子列表只有一个值,我缺少观察结果,我的列表中有名称,我希望保留这些名称

以下是我的示例数据集:

AA <- list(my.col1 =    1, my.col2 =    4, my.col3 = NULL, my.col4 = NULL)
BB <- list(my.col1 = NULL, my.col2 = NULL, my.col3 = NULL, my.col4 = NULL)
CC <- list(my.col1 =   13, my.col2 =    8, my.col3 =    2, my.col4 =   10)
DD <- list(my.col1 = NULL, my.col2 = NULL, my.col3 =   -5, my.col4 =    7)

my.stuff <- list(AA, BB, CC, DD)
names(my.stuff) <- c("AA", "BB", "CC", "DD")
my.stuff
我可以得到类似的输出,但根本不是我想要的格式:

my.stuff2    <- do.call(rbind, my.stuff)
my.stuff2
#    my.col1 my.col2 my.col3 my.col4
# AA 1       4       NULL    NULL   
# BB NULL    NULL    NULL    NULL   
# CC 13      8       2       10     
# DD NULL    NULL    -5      7

my.stuff2我们可以使用递归
map

library(tidyverse)
map_df(my.stuff, ~ map_df(.x,  ~ 
                      replace(.x, is.null(.x), NA)), .id = "my.var")  
# A tibble: 4 x 5
#  my.var my.col1 my.col2 my.col3 my.col4
#  <chr>    <dbl>   <dbl>   <dbl>   <dbl>
#1 AA           1       4      NA      NA
#2 BB          NA      NA      NA      NA
#3 CC          13       8       2      10
#4 DD          NA      NA      -5       7
库(tidyverse)
map_df(my.stuff,~map_df(.x,~
替换(.x,is.null(.x),NA)),.id=“my.var”)
#一个tibble:4x5
#my.var my.col1 my.col2 my.col3 my.col4
#               
#1 AA 1 4 NA NA
#2 BB-NA-NA
#3 CC 13 8 2 10
#4 DD NA-5 7
这个怎么样

do <- as.data.frame(do.call(rbind, lapply(my.stuff, as.vector)))
do <- cbind(my.var=rownames(do), do)
do[do == "NULL"] <- NA
编辑: 如果我们不希望@akrun合理地建议列表作为列对象,我们可以这样做:

u <- as.character(unlist(my.stuff, recursive=FALSE))
u[u == "NULL"] <- NA
do <- matrix(as.integer(u), nrow=4, byrow=TRUE, 
             dimnames=list(NULL, names(my.stuff[[1]])))
do <- data.frame(my.var=names(my.stuff), do, stringsAsFactors=FALSE)
> do
   my.var my.col1 my.col2 my.col3 my.col4
AA     AA       1       4      NA      NA
BB     BB      NA      NA      NA      NA
CC     CC      13       8       2      10
DD     DD      NA      NA      -5       7
u <- as.character(unlist(my.stuff, recursive=FALSE))
u[u == "NULL"] <- NA
do <- matrix(as.integer(u), nrow=4, byrow=TRUE, 
             dimnames=list(NULL, names(my.stuff[[1]])))
do <- data.frame(my.var=names(my.stuff), do, stringsAsFactors=FALSE)