【问题标题】:Generate a list of tibble from a tibble by using map and select使用 map 从 tibble 生成 tibble 列表并选择
【发布时间】:2019-12-23 14:12:20
【问题描述】:

我想从以下代码中的一个 tibble 生成 tibble 列表。

tbl = tibble(id=1:10, a = rnorm(10), b = rnorm(10))
tbl_list =  c("a", "b") %>% map(~ tbl %>% select(c("id", .)))

我想要的输出是

tbl_list

[[1]]
# A tibble: 2 x 2
     id      a
  <int>  <dbl>
1     1 -0.704
2     2 -0.917

[[2]]
# A tibble: 2 x 2
     id      a
  <int>  <dbl>
1     1 -0.704
2     2 -0.917

但是,它显示错误消息,

c("id", .) 必须计算为列位置或名称,而不是列表”,

所以.似乎不是一个字符,而是一个列表

你能告诉我如何避免这个错误吗?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    您可以使用.x 访问该元素

    library(tidyverse)
    c("a", "b") %>% map(~ tbl %>% select(c("id", .x)))
    
    #[[1]]
    # A tibble: 10 x 2
    #      id      a
    #   <int>  <dbl>
    # 1     1  1.42 
    # 2     2  1.51 
    # 3     3 -0.385
    #...
    
    #[[2]]
    # A tibble: 10 x 2
    #      id      b
    #   <int>  <dbl>
    # 1     1  1.42 
    # 2     2  0.100
    # 3     3  1.28 
    #....
    

    您也可以使用.,但在链操作中使用它时. 指的是链左侧的对象,即在这种情况下tbl,因此它返回错误。使用. 的一种方法是

    c("a", "b") %>% map(~select(tbl, c('id', .)))
    

    【讨论】:

    • 非常感谢!我可以成功了。
    • 很抱歉我不熟悉这个网站。我接受你的回答。
    猜你喜欢
    • 1970-01-01
    • 2021-08-01
    • 2018-04-21
    • 1970-01-01
    • 2020-12-16
    • 2022-01-11
    • 1970-01-01
    • 2021-06-09
    • 2021-03-15
    相关资源
    最近更新 更多