R 列表到数据框,映射_df正在移动行

R 列表到数据框,映射_df正在移动行,r,list,purrr,mapply,R,List,Purrr,Mapply,我的数据输出是一个包含参与者数据嵌套列表的列表 例如,一个列表将包含参与者1到参与者5 在该列表中,参与者1将有2天的数据,参与者2可能有5天的数据(嵌套列表),等等 当我使用map_df组合这些列表时,它会像这样移动行: xtest = map_df(DF, ~as.data.frame(.x), .null = NA) # which comes out like this structure(list(X0.601705399641698 = c(0.60170539964169

我的数据输出是一个包含参与者数据嵌套列表的列表

  • 例如,一个列表将包含参与者1到参与者5
    • 在该列表中,参与者1将有2天的数据,参与者2可能有5天的数据(嵌套列表),等等
当我使用map_df组合这些列表时,它会像这样移动行:

xtest = map_df(DF, ~as.data.frame(.x), .null = NA)

# which comes out like this
structure(list(X0.601705399641698 = c(0.601705399641698, NA, 
                                      NA, NA, NA), X1.0967226417789 = c(NA, 1.0967226417789, NA, NA, 
                                                                        NA), X1.18794820947846 = c(NA, 1.18794820947846, NA, NA, NA), 
               X3.98557480186904 = c(NA, 3.98557480186904, NA, NA, NA), 
               X0.995996328131446 = c(NA, NA, 0.995996328131446, NA, NA), 
               X0.564513260465204 = c(NA, NA, 0.564513260465204, NA, NA), 
               X1.31356753668681 = c(NA, NA, 1.31356753668681, NA, NA), 
               X0.891872221784271 = c(NA, NA, 0.891872221784271, NA, NA), 
               X0.649008813684839 = c(NA, NA, NA, 0.649008813684839, NA), 
               X1.0036615512612 = c(NA, NA, NA, 1.0036615512612, NA), NA_real_. = c(NA_real_, 
                                                                                    NA_real_, NA_real_, NA_real_, NA_real_), X0.828273303379322 = c(NA, 
                                                                                                                                                    NA, NA, NA, 0.828273303379322)), row.names = c(NA, -5L), class = "data.frame")

  X0.601705399641698 X1.0967226417789 X1.18794820947846 X3.98557480186904 X0.995996328131446 X0.564513260465204 X1.31356753668681 X0.891872221784271
1          0.6017054               NA                NA                NA                 NA                 NA                NA                 NA
2                 NA         1.096723          1.187948          3.985575                 NA                 NA                NA                 NA
3                 NA               NA                NA                NA          0.9959963          0.5645133          1.313568          0.8918722
4                 NA               NA                NA                NA                 NA                 NA                NA                 NA
5                 NA               NA                NA                NA                 NA                 NA                NA                 NA
  X0.649008813684839 X1.0036615512612 NA_real_. X0.828273303379322
1                 NA               NA        NA                 NA
2                 NA               NA        NA                 NA
3                 NA               NA        NA                 NA
4          0.6490088         1.003662        NA                 NA
5                 NA               NA        NA          0.8282733
它似乎是按列添加数据,并移动新值,而不是从参与者2的第1列第2行开始,依此类推

是否有办法将map_df数据帧输出更改为从第1列开始,但保留与每个参与者对应的行

预期产出:

                 1              2                 3                  4
1          0.6017054         NA              NA                NA # participant 1
2          1.096723          1.187948        3.985575          NA # participant 2
3          0.9959963         0.5645133       1.313568          0.8918722 # participant 3
4          0.6490088         1.003662        NA                NA # Participant 4
5          0.8282733         NA              NA                NA # Participant 5


一种
tidyverse
方法

library(tidyverse)
map_dfr(DF, ~unlist(.x) %>% t() %>% as.data.frame())
#         V1        V2       V3        V4
#1 0.6017054        NA       NA        NA
#2 1.0967226 1.1879482 3.985575        NA
#3 0.9959963 0.5645133 1.313568 0.8918722
#4 0.6490088 1.0036616       NA        NA
#5 0.8282733        NA       NA        NA
或者使用
data.table

library(data.table)
rbindlist(lapply(DF, function(x) data.table(t(unlist(x)))), fill = TRUE)
#          V1        V2       V3        V4
#1: 0.6017054        NA       NA        NA
#2: 1.0967226 1.1879482 3.985575        NA
#3: 0.9959963 0.5645133 1.313568 0.8918722
#4: 0.6490088 1.0036616       NA        NA
#5: 0.8282733        NA       NA        NA

请包括您的预期输出,即您想要的输出,而不仅仅是您不想要的输出。抱歉,已更新。您的示例数据
列表
不包含任何名称。最后的列名
“Clm1”
“Clm2”
“Clm3”
“Clm4”
来自哪里?在
tidyverse
中,从无名称的
列表中重塑条目通常会导致一些警告/错误。实际数据
列表中的元素是否有名称?原始列表输出的名称为[[1]],依此类推。map_df函数似乎只是根据列表中的值命名列。最后的列名“Clm1”等,在这一刻并不重要,这只是我试图澄清。它们可以是1,2,3,4作为默认值,或者没有列的名称,我可以稍后重命名它们。
[[1]]
等等告诉您元素未命名。这适用于我发布的5个参与者的子集数据;然而,当我尝试在100个参与者列表上应用这两种方法时,我得到一个错误:t.default中的错误(unlist(x)):参数不是矩阵。更新:我在列表应该存在的位置发现了一个空值,通过将其设置为0进行修复。
library(data.table)
rbindlist(lapply(DF, function(x) data.table(t(unlist(x)))), fill = TRUE)
#          V1        V2       V3        V4
#1: 0.6017054        NA       NA        NA
#2: 1.0967226 1.1879482 3.985575        NA
#3: 0.9959963 0.5645133 1.313568 0.8918722
#4: 0.6490088 1.0036616       NA        NA
#5: 0.8282733        NA       NA        NA