Соберите столбик с матричными столбцами - PullRequest
1 голос
/ 13 февраля 2020

Мой тиббл выглядит так:

df = tibble(x = 1:3, col1 = matrix(rnorm(6), ncol = 2), 
                col2 = matrix(rnorm(6), ncol = 2))

у него есть три столбца, два из которых содержат матрицу с 2 столбцами в каждом (в моем случае есть еще много столбцов, этот пример просто для иллюстрации проблемы ). Я преобразую эти данные в длинный формат, используя набор

gather(df, key, val, -x)

, но это не дает желаемого результата. Он складывает только первый столбец столбца 1 и столбца 2 и удаляет остальные. Я хочу, чтобы val содержал векторы строк столбца 1 и столбца 2, т. Е. val - это столбец с матричным значением (содержащий матрицы 1x2). Тидиверс, однако, кажется, не в состоянии должным образом иметь дело с матричными столбцами. Есть ли способ достичь желаемого результата? (В идеале, используя процедуры из Tidyverse)

1 Ответ

1 голос
/ 13 февраля 2020

Некоторые из столбцов matrix. Он должен быть преобразован в соответствующие столбцы data.frame и затем будет работать

library(dplyr)
library(tidyr) 
do.call(data.frame, df) %>%
       pivot_longer(cols = -x)

Или использовать gather

do.call(data.frame, df) %>%
       gather(key, val, -x)

Или другой вариант - преобразовать matrix до vector с c и затем используйте unnest

df %>%
     mutate_at(-1,   ~ list(c(.))) %>%
     unnest(c(col1, col2))

, если значения 'col1', 'col2' будут находиться в одном столбце

df %>%
    mutate_at(-1,   ~ list(c(.))) %>%
    pivot_longer(cols = -x) %>% 
    unnest(c(value))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...