首页 > 解决方案 > add_column 适用于矩阵

问题描述

我有一个2-by-2 小标题,add_column用来添加一个2-by-2矩阵。我想要一个生成的4-by-4小标题,但它最终有一个2-by-3小标题。

这是一个示例代码:

A <- tibble( x = c(-1,1), y = c(-2,2))

A <- A %>% add_column( z = matrix( rnorm(4), 2,2 )   )

dim(A)返回 2 3

所以我的问题是这个结果矩阵如何2-by-4

标签: rtidyverse

解决方案


我们可以从matrix列'z'展平为常规列do.calldata.frame调用

library(dplyr)
library(tibble)
A %>%
    add_column( z = matrix( rnorm(4), 2,2 )   ) %>%
    do.call(data.frame, .) %>%
    as_tibble

-输出

# A tibble: 2 x 4
#      x     y   z.1   z.2
#  <dbl> <dbl> <dbl> <dbl>
#1    -1    -2 -1.41 -1.93
#2     1     2  1.80  1.01

或者另一种选择是将其拆分matrix为一个listasplit使用unnest_wider

library(tidyr)
A %>% 
  add_column( z = matrix( rnorm(4), 2,2 )   ) %>%
  mutate(z = asplit(z, 2)) %>% 
  unnest_wider(c(z))

推荐阅读