代码之家  ›  专栏  ›  技术社区  ›  Demetri Pananos

如何从数据帧列表中选择列?

  •  2
  • Demetri Pananos  · 技术社区  · 7 年前

    我的tibble中有几个tibble作为列表列。看起来像

    # A tibble: 2 x 2
      kind      data                 
      <chr>     <list>               
    1 Bernoulli <tibble [3,154 × 13]>
    2 Binomial  <tibble [43 × 3]>  
    

    data 列有一个名为 cigs . 我想从每个tibble中提取该列,并将其作为新列包含。所需输出为

      # A tibble: 2 x 2
          kind      data                   cigs
          <chr>     <list>                 <list>
        1 Bernoulli <tibble [3,154 × 13]>  <tibble [3,154 x 1]>
        2 Binomial  <tibble [43 × 3]>      <tibble [43 x 1]>
    

    目前,我是这样做的

    library(tidyverse)
    compare_me %>% 
      mutate(cigs = data %>% map( ~ select(.x,cigs)) )
    

    purrr有没有更简单的方法?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Mark    7 年前

    我不知道你想让它变得容易多少,但这里有一种方法 purrr . 您可以映射 [ 功能(相当于执行 df$data["cigs"] )并将结果存储在cigs变量中。无需dplyr。

    library(purrr)
    
    a = tibble::tibble(r = letters, cigs = runif(26))
    b = tibble::tibble(r = LETTERS, cigs = rnorm(26))
    
    df = tibble::tibble(kind = c("bernie","binomi"),data = list(a,b))
    df$cigs = map(df$data,`[`,"cigs")
    
    #> # A tibble: 2 x 3
    #>     kind              data              cigs
    #>    <chr>            <list>            <list>
    #> 1 bernie <tibble [26 x 2]> <tibble [26 x 1]>
    #> 2 binomi <tibble [26 x 2]> <tibble [26 x 1]>