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。例如,在这之前,行是否应该按年份排序?谢谢您的评论。我修改了帖子!希望一切顺利!