R 在字符串中更改数字
我有一个巨大的数据帧。然而,我有相似的ID,这些是不同的观察结果。我想做的是更改“ID”列中的最后/最后两位数字。因此,第5行的ID alnfru_00001应该是alnfru_00006,第34行应该是carlin_00005,而不是carlin_00001,依此类推。即使使用其他ID,也可以在整个数据帧中看到此序列。有人能提供一些帮助吗 我应该先尝试对数据进行分组吗 注意:我不希望尾随数字跟踪行号R 在字符串中更改数字,r,R,我有一个巨大的数据帧。然而,我有相似的ID,这些是不同的观察结果。我想做的是更改“ID”列中的最后/最后两位数字。因此,第5行的ID alnfru_00001应该是alnfru_00006,第34行应该是carlin_00005,而不是carlin_00001,依此类推。即使使用其他ID,也可以在整个数据帧中看到此序列。有人能提供一些帮助吗 我应该先尝试对数据进行分组吗 注意:我不希望尾随数字跟踪行号 ID PFT area 1
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
数据框应该是这样的
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
可以做:
library(dplyr)
df %>%
group_by(PFT, area) %>%
mutate(
ID = as.character(ID),
ID = paste0(substr(ID, 1, nchar(ID) - nchar(row_number())), 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_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
可以做:
library(dplyr)
df %>%
group_by(PFT, area) %>%
mutate(
ID = as.character(ID),
ID = paste0(substr(ID, 1, nchar(ID) - nchar(row_number())), 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_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
您好,我想这将有助于统计一些替换规则。比如,如果ID是唯一的,它总是正确的,不管它是什么。如果ID不唯一,则当前行数较低的ID被视为正确,行数较高的ID将获得其组中第一个未出现的编号…您好,我认为这将有助于统计一些替换规则。比如,如果ID是唯一的,它总是正确的,不管它是什么。如果ID不唯一,则当前行号较低的ID被视为正确,行号较高的ID将获得其组中第一个未出现的编号…不尝试抨击您的答案,但这不会将行号5(当前:alnfru_00001)替换为alnfru_00005,将行号9(当前:alnfru_00005)替换为alnfru_00009吗?是,与预期输出完全相同是的,您是对的:)但预期输出也可能是一个度假胜地,原始第9行数据被抽签到第5行,原始第5行数据从alnfru_00001更改为alnfru_00006,并被抽签到第6行。我想如果没有使每一行都唯一的id列,很难判断期望的输出是什么。嗯,我不确定我是否理解。我看到的逻辑是每个组的行号,而不考虑整个数据帧的行号。如果OP不同意,他会再次告诉我们,我不想写下你的答案,因为我认为这是一个很好的解决方案。我想说的唯一一件事是,这可能会违反op在其发帖中的要求:因此,第5行的ID alnfru_00001应该是alnfru_00006,而不是试图抨击您的答案,但这不会将第5行(当前:alnfru_00001)替换为alnfru_00005,将第9行(当前:alnfru_00005)替换为alnfru_00009吗?是的,与预期输出完全相同是的,您是对的:)但预期输出也可能是一个度假胜地,原始第9行数据被抽签到第5行,原始第5行数据从alnfru_00001更改为alnfru_00006,并被抽签到第6行。我想如果没有使每一行都唯一的id列,很难判断期望的输出是什么。嗯,我不确定我是否理解。我看到的逻辑是每个组的行号,而不考虑整个数据帧的行号。如果OP不同意,他会再次告诉我们,我不想写下你的答案,因为我认为这是一个很好的解决方案。我唯一想说的是,这可能会违反op在其startingpost中的要求:因此,第5行中的ID alnfru_00001应该是alnfru_00006