使用dplyr::rename()重命名R数据框报错,如何解决?
解决dplyr::rename报错的方法
第一步:确认数据集的实际列名
错误核心是你要重命名的原列名(比如trip_id)在数据集中不存在,先执行以下代码查看所有列名:
# 快速查看列名 colnames(X202112_divvy_tripdata) # 查看更详细的数据集结构(含列名和数据类型) dplyr::glimpse(X202112_divvy_tripdata)
执行后你能看到数据集里真实存在的列名——比如Divvy 2021年12月的数据集可能已经采用了新的列名规范(直接包含ride_id而非trip_id),这会导致你写的原列名和实际不符。
第二步:调整重命名映射
根据第一步得到的真实列名,修改dplyr::rename的参数,格式为新列名 = 原列名。举个例子:如果你的数据集里没有trip_id,反而已经有ride_id,那这一行映射就可以直接删掉;如果原列名是tripId(大小写差异),就改成对应的写法。
假设查看后确认原列名是tripId、bike_id、start_time等,调整后的代码示例如下:
X202112_divvy_tripdata <- dplyr::rename( X202112_divvy_tripdata, ride_id = tripId, rideable_type = bike_id, started_at = start_time, ended_at = end_time, start_station_name = from_station_name, start_station_id = from_station_id, end_station_name = to_station_name, end_station_id = to_station_id, member_casual = usertype )
备选方案:用rename_with批量处理(若列名有规律)
如果原列名和目标列名有统一规律,也可以用dplyr::rename_with批量重命名:
# 先定义原列名到目标列名的映射表 name_mapping <- c( "tripId" = "ride_id", "bike_id" = "rideable_type", "start_time" = "started_at", "end_time" = "ended_at", "from_station_name" = "start_station_name", "from_station_id" = "start_station_id", "to_station_name" = "end_station_name", "to_station_id" = "end_station_id", "usertype" = "member_casual" ) # 批量重命名 X202112_divvy_tripdata <- dplyr::rename_with( X202112_divvy_tripdata, ~ name_mapping[.x], names(name_mapping) )
内容的提问来源于stack exchange,提问作者antik731
相关产品推荐
相关产品推荐

