首页 > 解决方案 > 在使用`bind_rows()`之前更改数据框列表中所有列的数据类型

问题描述

我有一个数据框列表,例如来自以下代码:

"https://en.wikipedia.org/wiki/List_of_accidents_and_disasters_by_death_toll" %>% 
    rvest::read_html() %>% 
    html_nodes(css = 'table[class="wikitable sortable"]') %>% 
    html_table(fill = TRUE) 

我现在想将数据帧合并为一个,例如,dplyr::bind_rows()但得到Error: Can't combine ..1$Deaths <integer> and..5$Deaths (这里 <character>.建议的答案没有解决问题)。

所以我需要在使用行绑定之前转换数据类型。我想在管道内使用它(一个 tidyverse 解决方案是理想的),并且由于剩余项目的结构而不是循环遍历数据帧,而是使用类似矢量化的东西lapply(., function(x) {lapply(x %>% mutate_all, as.character)})(这不起作用)将所有值转换为character.

有人可以帮我弄这个吗?

标签: rtidyverse

解决方案


您可以将所有列类更改为字符并将它们绑定在一起map_df

library(tidyverse)
library(rvest)

"https://en.wikipedia.org/wiki/List_of_accidents_and_disasters_by_death_toll" %>% 
  rvest::read_html() %>% 
  html_nodes(css = 'table[class="wikitable sortable"]') %>% 
  html_table(fill = TRUE) %>%
  map_df(~.x %>% mutate(across(.fns = as.character)))

 # Deaths Date    Attraction               `Amusement park`  Location        Incident Injuries
 #  <chr>  <chr>   <chr>                    <chr>             <chr>           <chr>    <chr>   
 #1 28     14 Feb… Transvaal Park (entire … Transvaal Park    Yasenevo, Mosc… NA       NA      
 #2 15     27 Jun… Formosa Fun Coast music… Formosa Fun Coast Bali, New Taip… NA       NA      
 #3 8      11 May… Haunted Castle; a fire … Six Flags Great … Jackson Townsh… NA       NA      
 #4 7      9 June… Ghost Train; a fire at … Luna Park Sydney  Sydney, Austra… NA       NA      
 #5 7      14 Aug… Skylab; a crane collide… Hamburger Dom     Hamburg, (Germ… NA       NA      
# 6 6      13 Aug… Virginia Reel; a fire a… Palisades Amusem… Cliffside Park… NA       NA      
# 7 6      29 Jun… Eco-Adventure Valley Sp… OCT East          Yantian Distri… NA       NA      
# 8 5      30 May… Big Dipper; the roller … Battersea Park    Battersea, Lon… NA       NA      
# 9 5      23 Jun… Kuzuluk Aquapark swimmi… Kuzuluk Aquapark  Akyazi, Turkey… NA       NA      
#10 4      24 Jul… Big Dipper; a bolt came… Krug Park         Omaha, Nebrask… NA       NA      
# … with 1,895 more rows

推荐阅读