0

I have vector of values like some Job Positions lets say

JobPosition <- as.data.frame(rep(c("Helpdesk","Data Engineer","Salesman"), 5))

I want each Helpdesk associate with JobPosition 1, each DE with JobPosition2, each Salesman with JobPosition3. I know how to make them random strings using dplyr but not how to convert them into desired string with incremental number

Expected output

Job position    NewJobPosition
Helpdesk        JobPosition1
Data engineer   JobPosition2
Salesman        JobPosition3
Helpdesk        JobPosition1
Data engineer   JobPosition2
Salesman        JobPosition3
lifeofthenoobie
  • 127
  • 1
  • 7
  • Show us your expected output. – user2974951 Mar 21 '22 at 11:05
  • done. but I dont know how many unique position i'll find as I've large dataset, these 3 are just to show the pattern. Each job position should have JobPosition+X where X is the number, incrementing for each unique job position found in a column – lifeofthenoobie Mar 21 '22 at 11:08
  • See [How to join (merge) data frames (inner, outer, left, right)](https://stackoverflow.com/questions/1299871/how-to-join-merge-data-frames-inner-outer-left-right/1300618#1300618). – user2974951 Mar 21 '22 at 11:11
  • What do you suggest to merge? I don't know how many occurrences will be in the column – lifeofthenoobie Mar 21 '22 at 11:12

2 Answers2

1

We can do,

  JobPosition %>% mutate(number = as.integer(fct_inorder(Position))) %>% mutate(NewJobPosition = paste0('JobPosition', number)) %>% select(Position, NewJobPosition)

        Position NewJobPosition
1       Helpdesk   JobPosition1
2  Data Engineer   JobPosition2
3       Salesman   JobPosition3
4       Helpdesk   JobPosition1
5  Data Engineer   JobPosition2
6       Salesman   JobPosition3
7       Helpdesk   JobPosition1
8  Data Engineer   JobPosition2
9       Salesman   JobPosition3
10      Helpdesk   JobPosition1
11 Data Engineer   JobPosition2
12      Salesman   JobPosition3
13      Helpdesk   JobPosition1
14 Data Engineer   JobPosition2
15      Salesman   JobPosition3

Data

JobPosition <- data.frame('Position' = rep(c("Helpdesk","Data Engineer","Salesman"), 5))
Nad Pat
  • 3,129
  • 3
  • 10
  • 20
1

One way to do it (you can reduce code if you want, kept it like this for legibility)

library(dplyr)

JobPosition <- as.data.frame(rep(c("Helpdesk","Data Engineer","Salesman"), 5))
names(JobPosition) <- "Job Position"

#Give every unique Jobposition a seperate number
position_numbers <- unique(JobPosition) %>%
  mutate(NewJobDecision = paste0("JobPosition", row_number()))

#Merge them
merge(y = JobPosition, 
      x = position_numbers)
VvdL
  • 2,799
  • 1
  • 3
  • 14
  • Can I do that in one function calling? Id have at least 15 columns to do that Something like `dataset %>% position_numbers <- unique(dataset$`Job Position`) %>% mutate(NewJobDecision = paste0("JobPosition", row_number()))` – lifeofthenoobie Mar 21 '22 at 11:30