处理重复项

时间:2020-08-05 12:50:08

标签: r

我在R中有一个向量,其中有些重复:

v <- c(1,1,1,2,2,3)

现在,我需要一个函数来替换重复项,以获得后缀增加的序列:

result <- c(1,1.2,1.3,2,2.2,3)

3 个答案:

答案 0 :(得分:3)

使用ave,您可以为每个重复创建一个序列号:

ave(v, v, FUN = seq_along)
#[1] 1 2 3 1 2 1

将此除以10得到

ave(v, v, FUN = seq_along)/10
#[1] 0.1 0.2 0.3 0.1 0.2 0.1

现在向其中添加v

v1 <- v + ave(v, v, FUN = seq_along)/10
v1
#[1] 1.1 1.2 1.3 2.1 2.2 3.1

现在,由于您不想更改每个组的第一个值,因此可以:

v1[!duplicated(v)] <- unique(v)
v1
#[1] 1.0 1.2 1.3 2.0 2.2 3.0

答案 1 :(得分:0)

这是ave的解决方案。尽管@Ronak Shah也已经与ave发布了一种解决方案,但我相信这是不同的。

ave(v, v, FUN = function(x) x + c(0, seq_along(x)[-1])/10)
#[1] 1.0 1.2 1.3 2.0 2.2 3.0

答案 2 :(得分:0)

这里有一个使用dplyr的解决方案,可能不像@RuiBarradas和@RonakShah以前的答案那样容易,因为您必须转换为数据框并进行一些操作,但这可能会有所帮助:

library(tidyverse)
v <- c(1,1,1,2,2,3)
#Dataframe
v1 <- data.frame(v)
#Mutate
v1 %>% group_by(v) %>% mutate(v2=as.character(1:n()),
                              v2=ifelse(v2=='1',as.character(v),paste0(v,'.',v2))) %>% 
  ungroup() %>% select(v2)

# A tibble: 6 x 1
  v2   
  <chr>
1 1    
2 1.2  
3 1.3  
4 2    
5 2.2  
6 3