【问题标题】:Convert matrix column in R data frame to multiple columns将R数据框中的矩阵列转换为多列
【发布时间】:2020-11-25 21:10:23
【问题描述】:

这样做

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 矩阵的每一列都是数据框中自己的列。

我认为使用tidyr::unnest 之类的东西会有一些简单的方法来做到这一点,但这不起作用。天真地尝试会导致以下错误。

> 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 

【问题讨论】:

    标签: r dplyr tidyr


    【解决方案1】:

    do.calldata.frame 的选项

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

    或使用unnest_wider

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

    【讨论】:

    • 还有invoke(data.frame, df)甚至lift(data.frame)(df)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多