r - 使用 R 中现有列的前 3 个字母创建可以充当主键的列
问题描述
我有一张表,其中包含各种制造型号的车辆。我需要使用 make 列的前 3 个字母创建一个唯一键。
示例数据框:
> df <- data.frame(make = c('AUDI','AUDI','AUDI','FORD','FORD','FORD'), variant = c('A4','A6,','A8','EXPLORER','FIESTA','ENDEAVOUR'))
> df
make variant
1 AUDI A4
2 AUDI A6,
3 AUDI A8
4 FORD EXPLORER
5 FORD FIESTA
6 FORD ENDEAVOUR
> df$ID <- paste(substr(df$make,1,3),rep(1:length(df$make)), sep = '')
> df
make variant ID
1 AUDI A4 AUD1
2 AUDI A6, AUD2
3 AUDI A8 AUD3
4 FORD EXPLORER FOR4
5 FORD FIESTA FOR5
6 FORD ENDEAVOUR FOR6
>
预期输出:
> df
make variant ID
1 AUDI A4 AUD1
2 AUDI A6, AUD2
3 AUDI A8 AUD3
4 FORD EXPLORER FOR1
5 FORD FIESTA FOR2
6 FORD ENDEAVOUR FOR3
>
我不知道如何更改 ID 列中每个品牌的编号。有人可以让我知道该怎么做吗?
解决方案
我们可以在每个中生成行号make
并将其与前 3 个字符一起粘贴到make
.
library(dplyr)
df %>% group_by(make) %>% mutate(ID = paste0(substr(make, 1, 3), row_number()))
# make variant ID
# <fct> <fct> <chr>
#1 AUDI A4 AUD1
#2 AUDI A6, AUD2
#3 AUDI A8 AUD3
#4 FORD EXPLORER FOR1
#5 FORD FIESTA FOR2
#6 FORD ENDEAVOUR FOR3
或在基础 R 中:
with(df, paste0(substr(make, 1, 3), ave(seq_along(make), make, FUN = seq_along)))
#[1] "AUD1" "AUD2" "AUD3" "FOR1" "FOR2" "FOR3"
推荐阅读
- ios - 文件管理器在 iOS 模拟器上创建文件
- matlab - OptimizationVariable 对象数组的紧凑字符串表示?
- php - 如何在 itop 上添加搜索票的新条件
- nginx - AWS 弹性 Beanstalk 添加其他 Mime 类型
- docker - 构建 docker 文件并推送到 Docker Hub 时,Azure 构建管道中的 YAML 文件出现问题
- django-rest-framework - Openapi - 重复操作ID和额外参数
- javascript - 如何解决此错误“TypeError:无法解构'undefined'的属性'image',因为它是未定义的”?下面是我的代码-
- java - 将 ArrayList 项分离到常规关键字组
- docker - docker-compose.vs.debug 和 docker-compose 文件上的差异端口
- c# - 是否可以在其他地方托管 SQLMap API?