Преобразование столбца матрицы в кадре данных R в несколько столбцов - PullRequest
1 голос
/ 05 августа 2020

Делаем это

library(tidyverse)   
df <- tibble(x = runif(5), y = runif(n=25) %>% matrix(nrow = 5, ncol = 5))

Я получаю

# A tibble: 5 x 2
       x y[,1]  [,2]   [,3]   [,4]   [,5]
   <dbl> <dbl> <dbl>  <dbl>  <dbl>  <dbl>
1 0.0458 0.577 0.325 0.0186 0.354  0.735 
2 0.817  0.611 0.830 0.0421 0.0320 0.666 
3 0.618  0.968 0.611 0.466  0.733  0.0458
4 0.335  0.797 0.279 0.635  0.572  0.125 
5 0.837  0.483 0.965 0.831  0.900  0.674 

Это фрейм данных 5 x 2. Второй столбец y представляет собой матрицу. Я хотел бы, чтобы это был фрейм данных 5 x 6, в котором каждый столбец матрицы 5x5 был отдельным столбцом в фрейме данных. 1010 *, но это не работает. Наивная попытка приводит к следующей ошибке.

> unnest(df, y)
Error: Assigned data `map(data[[col]], as_df, col = col)` must be compatible with existing data.
x Existing data has 5 rows.
x Assigned data has 25 rows.
ℹ Only vectors of size 1 are recycled.
Run `rlang::last_error()` to see where the error occurred.

Я что-то упускаю или мне нужно сделать что-то вроде этого?

> bind_cols(x = df$x, as_tibble(df$y))
# A tibble: 5 x 6
       x    V1    V2     V3     V4     V5
   <dbl> <dbl> <dbl>  <dbl>  <dbl>  <dbl>
1 0.0458 0.577 0.325 0.0186 0.354  0.735 
2 0.817  0.611 0.830 0.0421 0.0320 0.666 
3 0.618  0.968 0.611 0.466  0.733  0.0458
4 0.335  0.797 0.279 0.635  0.572  0.125 
5 0.837  0.483 0.965 0.831  0.900  0.674 

1 Ответ

3 голосов
/ 05 августа 2020

Вариант с do.call с data.frame

library(dplyr)
df1 <- df %>%
          do.call(data.frame, .) %>%
          as_tibble

Или используйте unnest_wider

df %>% 
    mutate(y = as.data.frame(y)) %>%
    unnest_wider(y)
...