如何从数据框列表中选择一列?

时间:2018-02-08 16:18:34

标签: r purrr

我有几个元素作为我的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 个答案:

答案 0 :(得分:1)

我不知道你想要它变得多容易,但这只是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]>