R 函数将不同长度的嵌套列表转换为数据帧

R 函数将不同长度的嵌套列表转换为数据帧,r,nested-lists,R,Nested Lists,我有一个包含10000个嵌套列表的列表,其中包含两个组件(“x”和“y”)。e、 g 我尝试过很多方法,但至今都失败了。 有没有一个有效的方法来做到这一点 非常感谢,, Graham您可以为All中的每个list创建一个两列数据框,并将它们连接起来 library(dplyr) library(purrr) map(All, bind_rows) %>% reduce(full_join, by = 'x') %>% arrange(x) %>%

我有一个包含10000个嵌套列表的列表,其中包含两个组件(“x”和“y”)。e、 g

我尝试过很多方法,但至今都失败了。 有没有一个有效的方法来做到这一点

非常感谢,,
Graham

您可以为
All
中的每个
list
创建一个两列数据框,并将它们连接起来

library(dplyr)
library(purrr)

map(All, bind_rows) %>% 
    reduce(full_join, by = 'x') %>% 
    arrange(x) %>%
    rename_with(~names(All), -1)

# A tibble: 8 x 4
#      x iter1 iter2 iter3
#  <dbl> <dbl> <dbl> <dbl>
#1  8490  NA     1.2  NA  
#2  8500   1.2   1.2  NA  
#3  8510   1.3   1.3   1.2
#4  8520   1.4   1.4   1.2
#5  8530   1.5   1.5   1.3
#6  8540  NA    NA     1.4
#7  8550  NA    NA     1.5
#8  8560  NA    NA     1.6

您可以为
All
中的每个
list
创建一个2列数据框,并将它们连接起来

library(dplyr)
library(purrr)

map(All, bind_rows) %>% 
    reduce(full_join, by = 'x') %>% 
    arrange(x) %>%
    rename_with(~names(All), -1)

# A tibble: 8 x 4
#      x iter1 iter2 iter3
#  <dbl> <dbl> <dbl> <dbl>
#1  8490  NA     1.2  NA  
#2  8500   1.2   1.2  NA  
#3  8510   1.3   1.3   1.2
#4  8520   1.4   1.4   1.2
#5  8530   1.5   1.5   1.3
#6  8540  NA    NA     1.4
#7  8550  NA    NA     1.5
#8  8560  NA    NA     1.6

非常感谢。My R似乎无法识别dplyr中的“rename_with”函数,但第二种方法效果很好。
rename_with
在较新版本的
dplyr
dplyr 1.0.0
)在较旧版本中,您可以使用
rename_at(-1,~names(All))
@Graham很高兴能提供帮助!点击左边的复选标记,您可以自由选择:-)您只能接受每篇文章的一个答案。非常感谢。My R似乎无法识别dplyr中的“rename_with”函数,但第二种方法效果很好。
rename_with
在较新版本的
dplyr
dplyr 1.0.0
)在较旧版本中,您可以使用
rename_at(-1,~names(All))
@Graham很高兴能提供帮助!点击左边的复选标记,您可以自由选择:-)每篇文章只能接受一个答案。
library(dplyr)
library(purrr)

map(All, bind_rows) %>% 
    reduce(full_join, by = 'x') %>% 
    arrange(x) %>%
    rename_with(~names(All), -1)

# A tibble: 8 x 4
#      x iter1 iter2 iter3
#  <dbl> <dbl> <dbl> <dbl>
#1  8490  NA     1.2  NA  
#2  8500   1.2   1.2  NA  
#3  8510   1.3   1.3   1.2
#4  8520   1.4   1.4   1.2
#5  8530   1.5   1.5   1.3
#6  8540  NA    NA     1.4
#7  8550  NA    NA     1.5
#8  8560  NA    NA     1.6
Reduce(function(x, y) merge(x, y, all = TRUE, by = 'x'), 
       lapply(All, function(x) do.call(cbind.data.frame, x)))