【问题标题】:Mutate All columns in a list of tibbles改变小标题列表中的所有列
【发布时间】:2022-01-19 22:00:47
【问题描述】:

假设我有以下小标题:

a_list_of_tibbles <- list(
  a = tibble(a = rnorm(10)),
  b = tibble(a = runif(10)), 
  c = tibble(a = letters[1:10])
)

现在我想将它们全部映射到一个数据框/小标题中,由于列类型不同,这是不可能的。

我该怎么办?

我已经尝试过了,但我想摆脱 for 循环

for(i in 1:length(a_list_of_tibbles)){
  a_list_of_tibbles[[i]] <- a_list_of_tibbles[[i]] %>% mutate_all(as.character)
}

然后我运行:

map_dfr(.x = a_list_of_tibbles, .f = as_tibble)

【问题讨论】:

    标签: r tidyverse purrr


    【解决方案1】:

    我们可以在 map 中进行计算 - 使用 across 而不是后缀 _all(已被弃用)来循环数据集的列

    library(dplyr)
    library(purrr)
    map_dfr(a_list_of_tibbles, 
         ~.x %>%
           mutate(across(everything(), as.character) %>%
           as_tibble))
    

    -输出

    # A tibble: 30 × 1
       a                 
       <chr>             
     1 0.735200825884485 
     2 1.4741501589461   
     3 1.39870958697574  
     4 -0.36046362308853 
     5 -0.893860999301402
     6 -0.565468636033674
     7 -0.075270267983768
     8 2.33534260196058  
     9 0.69667906338348  
    10 1.54213170143702  
    # … with 20 more rows
    

    【讨论】:

    • 我只是不明白这个问题的意义。起初我以为他们想要bind_cols。无论如何,你的回答给了 OP 他们想要的东西,但你不能告诉我他们为什么想要那个:) +1
    • 我想要它,因为我运行了一个脚本,它读取应该是统一的 excel 文件(所有文件中的所有列都是相同的类型......是的,机会很大)所以我的 map_dfr由于列类型不匹配而爆炸
    • @M-- 他们的例子可能并不准确。可能是他们在列表中有一些具有不同列类型的数据集。因此,它们正在转换为单一类型并绑定为bind_rows 将引发不同数据类型的错误。即即使该列显示 1 个带有字符值的观察值,它也会变成字符类,因此绑定很困难
    • @MCP_infiltrator 不要误会我的意思,我不是在批评你或你的问题,只是想不出需要这样做的场景。干杯
    • @M-- 是的,没问题,无论如何我认为提出这个问题会帮助其他人,当你释放一个电子表格来填写必要的说明时,它经常发生。 ..expect 混乱和没有做你问的方式大声笑
    【解决方案2】:

    另一种选择是使用:

    library(tidyverse)
    
    map_depth(a_list_of_tibbles, 2, as.character) %>%
      bind_rows()
    #> # A tibble: 30 × 1
    #>    a                 
    #>    <chr>             
    #>  1 0.0894618169853206
    #>  2 -1.50144637645091 
    #>  3 1.44795821718513  
    #>  4 0.0795342912030257
    #>  5 -0.837985570593029
    #>  6 -0.050845557103668
    #>  7 0.031194556366589 
    #>  8 0.0989551909839589
    #>  9 1.87007290229274  
    #> 10 0.67816212007413  
    #> # … with 20 more rows
    

    reprex package (v2.0.1) 于 2021-12-20 创建

    【讨论】:

    • 非常酷,感谢发帖
    猜你喜欢
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 2021-12-14
    • 2019-10-04
    • 2021-12-13
    • 1970-01-01
    相关资源
    最近更新 更多