R语言如何将vehicle.type列数据拆分到新增的brand、model列
R 数据框车辆品牌型号拆分方案
针对vehicle.type列的品牌、型号拆分需求,核心逻辑是按第一个空格做分割,空格前内容存入brand列,空格后所有内容存入model列,以下是两种可直接运行的实现方式:
方法1:Base R 原生实现(无需安装第三方包)
不需要加载任何扩展包,用R自带的字符串处理函数即可完成,适配所有R环境:
# 构造原始示例数据 cars <- data.frame(vehicle.type = c('Skoda Oktavia', 'Hyundai i40', 'Skoda Superb')) # 按空格拆分字符串 split_text <- strsplit(cars$vehicle.type, split = " ", fixed = TRUE) # 提取第一个元素作为品牌 cars$brand <- vapply(split_text, FUN = `[`, FUN.VALUE = character(1), 1) # 提取剩余所有元素拼接为型号,兼容型号自带空格的场景 cars$model <- vapply(split_text, FUN = function(x) paste(x[-1], collapse = " "), FUN.VALUE = character(1))
方法2:tidyverse 流程实现(适合 dplyr 管道操作习惯)
如果你日常使用tidyverse生态做数据清洗,可以用tidyr包的separate函数一行完成拆分,代码更简洁:
library(dplyr) library(tidyr) cars <- cars %>% separate( col = vehicle.type, into = c("brand", "model"), sep = " ", extra = "merge" # 第一个分隔符后的内容全部合并到model列,避免多空格型号拆分错误 )
结果验证
两种方法运行后得到的数据框完全一致,输出如下:
> cars vehicle.type brand model 1 Skoda Oktavia Skoda Oktavia 2 Hyundai i40 Hyundai i40 3 Skoda Superb Skoda Superb
你示例中提到的“Octavia”为常见拼写变体,原数据中记录的“Oktavia”为斯柯达明锐的地区拼写版本,拆分逻辑不受拼写差异影响,如果需要统一拼写直接替换
model列对应值即可。
内容的提问来源于stack exchange,提问作者Sofie Zippay
相关产品推荐
相关产品推荐

