Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.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 从具有不同列名的表列表生成数据帧_R_Tidyverse - Fatal编程技术网

R 从具有不同列名的表列表生成数据帧

R 从具有不同列名的表列表生成数据帧,r,tidyverse,R,Tidyverse,我有一长串表需要转换成数据帧。问题是不同的表有不同的列名。所有名称的范围从1到5,但例如,一些表只有第2列,其他表有第4列和第5列,而其他表有5列 数据的一个例子是: > head(bffrsTbls) [[1]] 2 5 711 1781 [[2]] 2 5 1168 1530 [[3]] 1 2 3 5 390 471 904 1237 我已经尝试了bffrsTbls%>%purrr::map_df(,d

我有一长串表需要转换成数据帧。问题是不同的表有不同的列名。所有名称的范围从1到5,但例如,一些表只有第2列,其他表有第4列和第5列,而其他表有5列

数据的一个例子是:

> head(bffrsTbls)
[[1]]

   2    5 
 711 1781 

[[2]]

   2    5 
1168 1530 

[[3]]

   1    2    3    5 
 390  471  904 1237 

我已经尝试了
bffrsTbls%>%purrr::map_df(,dplyr::bind_rows)
,但是结果数据框中的值与每个表的列名不对应

我要寻找的结果是一个数据框,如下所示,其中列val1到val5对应于每个表的列1到5,另外一列显示该特定列的数据来自的列表元素的编号:

ListElmnt   val1   val2   val3   val4   val5
1           NA     711    NA     NA     1781
2           NA     1168   NA     NA     1530
3           390    471    904    NA     1237

我们可以通过使用
map
循环
list
list
元素转换为
tible
,并将其更改为单个数据帧

library(tidyverse)
map_dfr(bffrsTbls, ~ .x %>%
                     as.list %>%
                     as_tibble)

如果我们还需要所有组合,
enframe
列表
元素设置为2列TIBLE,并将输出数据集扩展为“宽”格式

bffrsTbls %>%
  map_df(enframe, .id = 'ListElmnt') %>% 
  mutate(name = factor(paste0('val', name), levels = paste0("val", 1:5))) %>% 
  spread(name, value, drop = FALSE)
# A tibble: 3 x 6
#  ListElmnt  val1  val2  val3  val4  val5
#  <chr>     <dbl> <dbl> <dbl> <dbl> <dbl>
#1 1            NA   711    NA    NA  1781
#2 2            NA  1168    NA    NA  1530
#3 3           390   471   904    NA  1237
数据
bffrsTbls它是一个
vector
还是一个data.frame`as list element它是vector:$:'table'int[1:2(1d)]711 1781.-attr(,“dimnames”)=1的列表….$:chr[1:2]“2”“5”$:“table”int[1:2(1d)]1168 1530..-attr(,“dimnames”)=1….$的列表:chr[1:2]“2”“5”
xtabs(values ~ ListElmnt + ind, do.call(rbind, Map(cbind, 
      lapply(bffrsTbls, stack), ListElmnt = seq_along(bffrsTbls))))
bffrsTbls <- list(structure(c(`2` = 711, `5` = 1781), .Dim = 2L, .Dimnames = list(
c("2", "5")), class = "table"), structure(c(`2` = 1168, `5` = 1530
 ), .Dim = 2L, .Dimnames = list(c("2", "5")), class = "table"), 
   structure(c(`1` = 390, `2` = 471, `3` = 904, `5` = 1237), .Dim = 4L,
   .Dimnames = list(
    c("1", "2", "3", "5")), class = "table"))