展平矩阵列表时包括列表索引-比这个更好的解决方案吗?

时间:2018-11-27 11:56:58

标签: r purrr

我想连接或展平矩阵列表,但将列表索引保留为结果矩阵中的新列。最好使用dplyr / map。

这是我的解决方法

l <- list(matrix(1:10, ncol=2, byrow=T), matrix(11:20, ncol=2, byrow=T), matrix(2:7, ncol=2, byrow=T))
melt(l) %>% 
  group_by(L1, Var1) %>% # group by list and row
  spread(Var2, value) %>%
  rename(row=Var1, list=L1, x=`1`, y=`2`) 

它可以工作(尽管结果需要重新排序),但是这样做有没有更优雅/更可靠/更有效的方式?

1 个答案:

答案 0 :(得分:0)

如果您只想知道值来自哪个矩阵,那么

@hrbrmstr的方法效果很好,并且非常紧凑。如您的示例一样,如果您还想知道每个矩阵来自哪一行,您可以执行以下操作:

library(tidyverse)

map_df(l, ~ {mutate(as_tibble(.), row = 1:nrow(.))}, .id = "list")

结果:

# A tibble: 13 x 4
   matrix   V1    V2   row
   <chr> <int> <int> <int>
 1 1         1     2     1
 2 1         3     4     2
 3 1         5     6     3
 4 1         7     8     4
 5 1         9    10     5
 6 2        11    12     1
 7 2        13    14     2
 8 2        15    16     3
 9 2        17    18     4
10 2        19    20     5
11 3         2     3     1
12 3         4     5     2
13 3         6     7     3