首页 > 解决方案 > 操作重复

问题描述

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

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

现在我想要一个替换重复项的函数以获得一系列增加的后缀:

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

标签: r

解决方案


使用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

推荐阅读