【问题标题】:extract dataframe from dataframe column an place it besides parent in R从数据框列中提取数据框并将其放置在 R 中的父级之外
【发布时间】:2021-06-12 23:34:17
【问题描述】:

我有一个由 10 列组成的数据框,其中一个是另一个数据框,是 rowwise() 操作的结果。

类似这样的东西(只是一个例子,column2 是一个不在列表中的数据框):

   id   column1   column2
    1213   a         df
    2234   b         df
    4565   c         df

class(df$column2)
[1] "data.frame"

因此,数据按行分组(请参阅 tidyverse 站点中的 rowwise()),问题是我想提取 column2 数据帧并将其放在其余列之外。因为它们具有相同的行数。

通常的 tidyr::unnest() 方法会出错:

 unnest(c, cols = c(column2))
Error: Assigned data `map(data[[col]], as_df, col = col)` must be compatible with existing data.
x Existing data has 24356 rows.
x Assigned data has 124 rows.
i Only vectors of size 1 are recycled.

所以我已将 column2 提取到另一个数据帧中,然后 dplyr::bind_cols() 但这很脏,我想是否有更清洁的方法。

【问题讨论】:

    标签: r dataframe tidyr unnest


    【解决方案1】:

    在基础 R 中,您可以尝试使用

    cbind(df[1:2], do.call(rbind, df$column2))
    

    使用dplyr -

    library(dplyr)
    bind_cols(df[1:2], bind_rows(df$column2))
    

    tidyr -

    tidyr::unnest_wider(df, column2)
    
    #    id column1   mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
    #  <int> <chr>   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
    #1  1213 a          21     6   160   110   3.9  2.62  16.5     0     1     4     4
    #2  2234 b          21     6   160   110   3.9  2.62  16.5     0     1     4     4
    #3  4565 c          21     6   160   110   3.9  2.62  16.5     0     1     4     4
    

    数据

    测试了所有关于这个数据的答案 -

    df <- structure(list(id = c(1213L, 2234L, 4565L), column1 = c("a", 
    "b", "c"), column2 = list(structure(list(mpg = 21, cyl = 6, disp = 160, 
        hp = 110, drat = 3.9, wt = 2.62, qsec = 16.46, vs = 0, am = 1, 
        gear = 4, carb = 4), row.names = "Mazda RX4", class = "data.frame"), 
        structure(list(mpg = 21, cyl = 6, disp = 160, hp = 110, drat = 3.9, 
            wt = 2.62, qsec = 16.46, vs = 0, am = 1, gear = 4, carb = 4), row.names = "Mazda RX4", class = "data.frame"), 
        structure(list(mpg = 21, cyl = 6, disp = 160, hp = 110, drat = 3.9, 
            wt = 2.62, qsec = 16.46, vs = 0, am = 1, gear = 4, carb = 4), row.names = "Mazda RX4", class = "data.frame"))), row.names = c(NA, 
    -3L), class = "data.frame")
    

    【讨论】:

      猜你喜欢
      • 2021-11-27
      • 2019-09-24
      • 2017-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-04
      • 2019-10-31
      相关资源
      最近更新 更多