Включать индекс списка при выравнивании списка матриц - лучшие решения, чем этот? - PullRequest
0 голосов
/ 27 ноября 2018

Я хочу объединить или сгладить список матриц, но сохранить индекс списка как новый столбец в результирующей матрице.Желательно использовать 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 голосов
/ 28 ноября 2018

@ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...