Reputation: 39
I have a huge data frame. However, I have similar IDs and these were different observations. What I am trying to do is change the last/last two digit(s) in the column "ID". So, ID alnfru_00001 in row 5 should be alnfru_00006 and row 34 should be carlin_00005 instead of carlin_00001 and so on. This sequence is seen right throughout the data frame even with other IDs. Can anyone provide some assistance?
Should I try to group the data first?
Note: I do not want the trailing number to track the row number
ID PFT area
1 alnfru_00001 alnfru Yukon_Delta
2 alnfru_00002 alnfru Yukon_Delta
3 alnfru_00003 alnfru Yukon_Delta
4 alnfru_00004 alnfru Yukon_Delta
5 alnfru_00001 alnfru Yukon_Delta
6 alnfru_00002 alnfru Yukon_Delta
7 alnfru_00003 alnfru Yukon_Delta
8 alnfru_00004 alnfru Yukon_Delta
9 alnfru_00005 alnfru Yukon_Delta
26 calcan_00001 calcan Yukon_Delta
27 calcan_00002 calcan Yukon_Delta
28 calcan_00003 calcan Yukon_Delta
29 calcan_00004 calcan Yukon_Delta
30 carlin_00001 carlin Yukon_Delta
31 carlin_00002 carlin Yukon_Delta
32 carlin_00003 carlin Yukon_Delta
33 carlin_00004 carlin Yukon_Delta
34 carlin_00001 carlin Yukon_Delta
18 alnfru_00001 alnfru Yukon_Delta
19 alnfru_00002 alnfru Yukon_Delta
20 alnfru_00003 alnfru Yukon_Delta
21 alnfru_00004 alnfru Yukon_Delta
22 alnfru_00001 alnfru Yukon_Delta
23 alnfru_00002 alnfru Yukon_Delta
24 alnfru_00003 alnfru Yukon_Delta
25 alnfru_00004 alnfru Yukon_Delta
The data frame should look like this
ID PFT area
1 alnfru_00001 alnfru Yukon_Delta
2 alnfru_00002 alnfru Yukon_Delta
3 alnfru_00003 alnfru Yukon_Delta
4 alnfru_00004 alnfru Yukon_Delta
5 alnfru_00005 alnfru Yukon_Delta
6 alnfru_00006 alnfru Yukon_Delta
7 alnfru_00007 alnfru Yukon_Delta
8 alnfru_00008 alnfru Yukon_Delta
9 alnfru_00009 alnfru Yukon_Delta
26 calcan_00001 calcan Yukon_Delta
27 calcan_00002 calcan Yukon_Delta
28 calcan_00003 calcan Yukon_Delta
29 calcan_00004 calcan Yukon_Delta
30 carlin_00001 carlin Yukon_Delta
31 carlin_00002 carlin Yukon_Delta
32 carlin_00003 carlin Yukon_Delta
33 carlin_00004 carlin Yukon_Delta
34 carlin_00005 carlin Yukon_Delta
18 alnfru_00010 alnfru Yukon_Delta
19 alnfru_00011 alnfru Yukon_Delta
20 alnfru_00012 alnfru Yukon_Delta
21 alnfru_00013 alnfru Yukon_Delta
22 alnfru_00014 alnfru Yukon_Delta
23 alnfru_00015 alnfru Yukon_Delta
24 alnfru_00016 alnfru Yukon_Delta
25 alnfru_00017 alnfru Yukon_Delta
Upvotes: 0
Views: 54
Reputation: 14764
Could do:
library(dplyr)
df %>%
group_by(PFT, area) %>%
mutate(
ID = as.character(ID),
ID = paste0(substr(ID, 1, nchar(ID) - nchar(row_number())), row_number()))
Output:
ID PFT area
1 alnfru_00001 alnfru Yukon_Delta
2 alnfru_00002 alnfru Yukon_Delta
3 alnfru_00003 alnfru Yukon_Delta
4 alnfru_00004 alnfru Yukon_Delta
5 alnfru_00005 alnfru Yukon_Delta
6 alnfru_00006 alnfru Yukon_Delta
7 alnfru_00007 alnfru Yukon_Delta
8 alnfru_00008 alnfru Yukon_Delta
9 alnfru_00009 alnfru Yukon_Delta
10 calcan_00001 calcan Yukon_Delta
11 calcan_00002 calcan Yukon_Delta
12 calcan_00003 calcan Yukon_Delta
13 calcan_00004 calcan Yukon_Delta
14 carlin_00001 carlin Yukon_Delta
15 carlin_00002 carlin Yukon_Delta
16 carlin_00003 carlin Yukon_Delta
17 carlin_00004 carlin Yukon_Delta
18 carlin_00005 carlin Yukon_Delta
19 alnfru_00010 alnfru Yukon_Delta
20 alnfru_00011 alnfru Yukon_Delta
21 alnfru_00012 alnfru Yukon_Delta
22 alnfru_00013 alnfru Yukon_Delta
23 alnfru_00014 alnfru Yukon_Delta
24 alnfru_00015 alnfru Yukon_Delta
25 alnfru_00016 alnfru Yukon_Delta
26 alnfru_00017 alnfru Yukon_Delta
Upvotes: 2