Создайте столбец, который может выступать в качестве первичного ключа, используя первые 3 буквы существующего столбца в R - PullRequest
1 голос
/ 02 апреля 2020

У меня есть таблица с различными вариантами моделей автомобилей. Мне нужно создать уникальный ключ, используя первые 3 буквы столбца make.

Пример кадра данных:

> 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. Может кто-нибудь, пожалуйста, дайте мне знать, как go об этом?

1 Ответ

0 голосов
/ 02 апреля 2020

Мы можем сгенерировать номер строки в каждом 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...