R 使用矩阵列收集TIBLE
我的tibble看起来像这样:R 使用矩阵列收集TIBLE,r,dplyr,tidyr,purrr,R,Dplyr,Tidyr,Purrr,我的tibble看起来像这样: df = tibble(x = 1:3, col1 = matrix(rnorm(6), ncol = 2), col2 = matrix(rnorm(6), ncol = 2)) 它有三列,其中两列包含一个矩阵,每个矩阵有两列。在我的例子中,还有更多的列,这个例子只是为了说明这个问题。我使用“聚集”将这些数据转换为长格式 gather(df, key, val, -x) 但这并不是我想要的结果。它仅堆叠第1列和第2列的第一列
df = tibble(x = 1:3, col1 = matrix(rnorm(6), ncol = 2),
col2 = matrix(rnorm(6), ncol = 2))
它有三列,其中两列包含一个矩阵,每个矩阵有两列。在我的例子中,还有更多的列,这个例子只是为了说明这个问题。我使用“聚集”将这些数据转换为长格式
gather(df, key, val, -x)
但这并不是我想要的结果。它仅堆叠第1列和第2列的第一列,并忽略其余列。我想要的是val包含第1列和第2列的行向量,即val是包含1x2矩阵的矩阵值列。然而,tidyverse似乎无法正确处理矩阵值列。有没有办法达到我想要的结果?理想情况下,使用tidyverse中的例程,一些列是矩阵。它需要转换为适当的data.frame列,然后才能工作
library(dplyr)
library(tidyr)
do.call(data.frame, df) %>%
pivot_longer(cols = -x)
或者使用聚集
或者另一种选择是使用c将矩阵转换为向量,然后使用unnest
如果“col1”、“col2”的值位于单个列中
df %>%
mutate_at(-1, ~ list(c(.))) %>%
pivot_longer(cols = -x) %>%
unnest(c(value))
有些列是矩阵。它需要转换为适当的data.frame列,然后才能工作
library(dplyr)
library(tidyr)
do.call(data.frame, df) %>%
pivot_longer(cols = -x)
或者使用聚集
或者另一种选择是使用c将矩阵转换为向量,然后使用unnest
如果“col1”、“col2”的值位于单个列中
df %>%
mutate_at(-1, ~ list(c(.))) %>%
pivot_longer(cols = -x) %>%
unnest(c(value))
完美的do.callible,df%>%pivot\u longercols=-x给了我想要的东西!谢谢,太好了!do.callible,df%>%pivot\u longercols=-x给了我想要的东西!非常感谢。