首页 > 解决方案 > 如何在R中更改多个数据框的数据类型

问题描述

我有多个数据框的列表。

files_list <- list(data_04, data_05, data_06, data_07, data_08, data_09, data_010, data_011,
                   data_012, data_013, data_015, data_016, data_017, data_018)

我如何更改每列的数据类型,以便它们通过数据框匹配。所有数据框都具有相同的列和列名。我已经尝试过了,但它不起作用。

for (i in files_list) {
  i %>%
  mutate(ride_id = as.character(ride_id)) %>%
  mutate(rideable_type = as.character(rideable_type)) %>%
  mutate(started_at = as_datetime(started_at)) %>%
  mutate(ended_at = as_datetime(ended_at)) %>%
  mutate(start_station_name = as.character(start_station_name)) %>%
  mutate(start_station_id = as.integer(start_station_id)) %>%
  mutate(end_station_name = as.character(end_station_name)) %>%
  mutate(end_station_id = as.integer(end_station_id)) %>%
  mutate(start_lat = as.numeric(start_lat)) %>%
  mutate(start_lng = as.numeric(start_lng)) %>%
  mutate(end_lat = as.numeric(end_lat)) %>%
  mutate(end_lng = as.numeric(end_lng)) %>%
  mutate(member_casual = as.character(member_casual))
} 

标签: rloops

解决方案


你可以写一个函数然后用lapply()就行了。

下面应该可以工作,但我不能确定,因为我不知道数据是什么样的。

EditDataFunction <- function(data){
  clean_data <- data %>% 
    mutate(ride_id = as.character(ride_id)) %>%
    mutate(rideable_type = as.character(rideable_type)) %>%
    mutate(started_at = as_datetime(started_at)) %>%
    mutate(ended_at = as_datetime(ended_at)) %>%
    mutate(start_station_name = as.character(start_station_name)) %>%
    mutate(start_station_id = as.integer(start_station_id)) %>%
    mutate(end_station_name = as.character(end_station_name)) %>%
    mutate(end_station_id = as.integer(end_station_id)) %>%
    mutate(start_lat = as.numeric(start_lat)) %>%
    mutate(start_lng = as.numeric(start_lng)) %>%
    mutate(end_lat = as.numeric(end_lat)) %>%
    mutate(end_lng = as.numeric(end_lng)) %>%
    mutate(member_casual = as.character(member_casual))
  
  return(clean_data)
  
}

clean_list <- lapply(files_list, EditDataFunction) 

然后,如果您需要将它们全部绑定在一起,您可以使用data.table::rbindlist


推荐阅读