使用bind_cols()添加列时能否直接指定列名,无需后续重命名?
优雅添加自定义命名的行程时长列方案
方法一:用mutate直接生成(推荐)
不用单独提取列,直接在原数据框上完成计算、命名和列位置指定,一步到位,完全省去后续rename和relocate操作:
library(tidyverse) library(lubridate) cyc_trip_data <- cyc_trip_data %>% mutate( trip_duration = duration(as.double(ended_at - started_at)), .after = ended_at # 直接指定列位置在ended_at之后 )
这是最贴合tidyverse风格的写法,代码简洁逻辑连贯。
方法二:给trip_duration添加列名后再bind_cols
如果一定要保留单独计算时长的步骤,只需把结果包装成带明确列名的tibble,bind_cols就会自动使用自定义列名:
# 计算并包装成带列名的tibble trip_duration <- tibble(trip_duration = duration(as.double(cyc_trip_data$ended_at - cyc_trip_data$started_at))) # 绑定并调整位置(可选) cyc_trip_data <- cyc_trip_data %>% bind_cols(trip_duration) %>% relocate(trip_duration, .after = ended_at)
为什么之前的bind_cols会生成...n命名?
因为你之前传入的trip_duration是一个duration类型的向量,不是带列名的数据框/tibble。bind_cols处理单个向量时无法获取自定义列名,只能用默认的序号规则生成...n类命名。
内容的提问来源于stack exchange,提问作者kamiljk
相关产品推荐
相关产品推荐

