R 重命名重复的行
我有一个时间序列数据帧,看起来像这样:R 重命名重复的行,r,R,我有一个时间序列数据帧,看起来像这样: ... year site 1987 ak12 1976 ak12 1766 ak13 1818 ak13 1987 ak12 2001 ak12 ... 正如您所看到的,在本例中,有些站点名称是重复的ak12。我想将ak12的一个时间序列重命名为某个唯一的名称,例如“ak12_a”,而无需对行进行排序。像这样: ... year site 1987 ak12 1976 ak12 1766
...
year site
1987 ak12
1976 ak12
1766 ak13
1818 ak13
1987 ak12
2001 ak12
...
正如您所看到的,在本例中,有些站点名称是重复的ak12。我想将ak12的一个时间序列重命名为某个唯一的名称,例如“ak12_a”,而无需对行进行排序。像这样:
...
year site
1987 ak12
1976 ak12
1766 ak13
1818 ak13
1987 ak12_a
2001 ak12_a
...
我知道make_unique函数,但我不知道如何在这种情况下应用它,因为行是重复的,因为它们跟随年份列。所以我需要一些代码,每当它“遇到”第二个副本时,它就会重命名它的所有行。我怎样才能做到这一点呢?我建议创建一个嵌套的for循环,运行每个项以检查重复项
count = 1 #for the duplicate count
for(a in 'dataframe'){
for(b in 2:'dataframe'){
if (equal(a,b)) { #please check on this one, not sure about the command
b = paste(a,"_",count)
}
}
}
我在没有做测试的情况下,在移动中输入了这个,但希望它能为您工作。请指出它是否有问题。我建议创建一个嵌套的for循环,运行每个项以检查重复项
count = 1 #for the duplicate count
for(a in 'dataframe'){
for(b in 2:'dataframe'){
if (equal(a,b)) { #please check on this one, not sure about the command
b = paste(a,"_",count)
}
}
}
我在没有做测试的情况下,在移动中输入了这个,但希望它能为您工作。请指出它是否有问题。这是否有效:
library(dplyr)
library(stringr)
df %>% group_by(year) %>% mutate(site = case_when(duplicated(site) ~ str_c(site, '_a', sep = ''), TRUE ~ site))
# A tibble: 6 x 2
# Groups: year [5]
year site
<dbl> <chr>
1 1987 ak12
2 1976 ak12
3 1766 ak13
4 1818 ak13
5 1987 ak12_a
6 2001 ak12
使用的数据:
df
# A tibble: 6 x 2
year site
<dbl> <chr>
1 1987 ak12
2 1976 ak12
3 1766 ak13
4 1818 ak13
5 1987 ak12
6 2001 ak12
这是否有效:
library(dplyr)
library(stringr)
df %>% group_by(year) %>% mutate(site = case_when(duplicated(site) ~ str_c(site, '_a', sep = ''), TRUE ~ site))
# A tibble: 6 x 2
# Groups: year [5]
year site
<dbl> <chr>
1 1987 ak12
2 1976 ak12
3 1766 ak13
4 1818 ak13
5 1987 ak12_a
6 2001 ak12
使用的数据:
df
# A tibble: 6 x 2
year site
<dbl> <chr>
1 1987 ak12
2 1976 ak12
3 1766 ak13
4 1818 ak13
5 1987 ak12
6 2001 ak12
这就是你要找的吗
df <- within(df, site <- ave(site, year, FUN = make.unique))
我使用的数据
structure(list(year = c(1987L, 1976L, 1766L, 1818L, 1987L, 2001L
), site = c("ak12", "ak12", "ak13", "ak13", "ak12", "ak12")), class = "data.frame", row.names = c(NA,
-6L))
这就是你要找的吗
df <- within(df, site <- ave(site, year, FUN = make.unique))
我使用的数据
structure(list(year = c(1987L, 1976L, 1766L, 1818L, 1987L, 2001L
), site = c("ak12", "ak12", "ak13", "ak13", "ak12", "ak12")), class = "data.frame", row.names = c(NA,
-6L))
带有data.table的选项
带有data.table的选项
请显示最终结果应该是什么样子。现在还不清楚该重命名哪个ak12。例如,在这之前,行是否应该按年份排序?谢谢您的评论。我修改了帖子!希望一切顺利!请显示最终结果应该是什么样子。现在还不清楚该重命名哪个ak12。例如,在这之前,行是否应该按年份排序?谢谢您的评论。我修改了帖子!希望一切顺利!