I have the following data frame:

I have multiple participants listed in subj_id (you can see only 2 here). I want to change all Pre items in the trial column to Pre1, Pre2, Pre3, Pre4.
How can I do this?
dat <- data.frame( subj_id = c(rep(1L, 7), rep(2L, 7)), trial = c(rep("Pre", 4), rep("Test", 3), rep("Pre", 4), rep("Test", 3)), judgment = 1:14 ) dat # subj_id trial judgment # 1 1 Pre 1 # 2 1 Pre 2 # 3 1 Pre 3 # 4 1 Pre 4 # 5 1 Test 5 # 6 1 Test 6 # 7 1 Test 7 # 8 2 Pre 8 # 9 2 Pre 9 # 10 2 Pre 10 # 11 2 Pre 11 # 12 2 Test 12 # 13 2 Test 13 # 14 2 Test 14 ave(seq_len(nrow(dat)), dat[,c("subj_id", "trial")], FUN = seq_along) # [1] 1 2 3 4 1 2 3 1 2 3 4 1 2 3 dat$trial <- paste0(dat$trial, ave(seq_len(nrow(dat)), dat[,c("subj_id", "trial")], FUN = seq_along)) dat # subj_id trial judgment # 1 1 Pre1 1 # 2 1 Pre2 2 # 3 1 Pre3 3 # 4 1 Pre4 4 # 5 1 Test1 5 # 6 1 Test2 6 # 7 1 Test3 7 # 8 2 Pre1 8 # 9 2 Pre2 9 # 10 2 Pre3 10 # 11 2 Pre4 11 # 12 2 Test1 12 # 13 2 Test2 13 # 14 2 Test3 14 If you only need "Pre" numbered, then alter that code above to be
dat$trial <- ifelse(dat$trial == "Pre", paste0(dat$trial, ave(seq_len(nrow(dat)), dat[,c("subj_id", "trial")], FUN = seq_along)), dat$trial) dat # subj_id trial judgment # 1 1 Pre1 1 # 2 1 Pre2 2 # 3 1 Pre3 3 # 4 1 Pre4 4 # 5 1 Test 5 # 6 1 Test 6 # 7 1 Test 7 # 8 2 Pre1 8 # 9 2 Pre2 9 # 10 2 Pre3 10 # 11 2 Pre4 11 # 12 2 Test 12 # 13 2 Test 13 # 14 2 Test 14 library(dplyr) dat %>% group_by(subj_id, trial) %>% mutate(trial = paste0(trial, row_number())) %>% ungroup() # # A tibble: 14 x 3 # subj_id trial judgment # <int> <chr> <int> # 1 1 Pre1 1 # 2 1 Pre2 2 # 3 1 Pre3 3 # 4 1 Pre4 4 # 5 1 Test1 5 # 6 1 Test2 6 # 7 1 Test3 7 # 8 2 Pre1 8 # 9 2 Pre2 9 # 10 2 Pre3 10 # 11 2 Pre4 11 # 12 2 Test1 12 # 13 2 Test2 13 # 14 2 Test3 14 Similarly, if only "Pre", then
dat %>% group_by(subj_id, trial) %>% mutate(trial = if_else(trial == "Pre", paste0(trial, row_number()), trial)) %>% ungroup()
Test? Do you also want to change it toTest1 Test2...? Also note that one cannot replicate your work since you provided an image rather than plain text datadput(x)) and code you've attempted. Thanks!