R 每n个元素为字符串添加一个后缀

R 每n个元素为字符串添加一个后缀,r,string,R,String,我有一个包含字符元素的向量,如下所示: vec <- c("A", "A", "A", "B", "B", "B", "C", "C", "C") 我试过以下方法,但不起作用 sapply(vec, function(x) paste(x, seq(1,3,1), sep="_")) 使用“粘贴”怎么样: paste(vec,1:3,sep="_") 当我们不知道每个字母重复多少次时 # dynamic version paste(vec, unlist(sapply(a

我有一个包含字符元素的向量,如下所示:

vec <- c("A", "A", "A", "B", "B", "B", "C", "C", "C")
我试过以下方法,但不起作用

sapply(vec, function(x) paste(x, seq(1,3,1), sep="_"))

使用“粘贴”怎么样:

paste(vec,1:3,sep="_")
当我们不知道每个字母重复多少次时

# dynamic version
paste(vec,
      unlist(sapply(as.numeric(table(vec)),
                    function(i) seq(1,i,1))),
      sep="_")
正如@Jay建议的更简单的动态版本

paste(vec,sequence(rle(vec)$lengths), sep="_")

使用“粘贴”怎么样:

paste(vec,1:3,sep="_")
当我们不知道每个字母重复多少次时

# dynamic version
paste(vec,
      unlist(sapply(as.numeric(table(vec)),
                    function(i) seq(1,i,1))),
      sep="_")
正如@Jay建议的更简单的动态版本

paste(vec,sequence(rle(vec)$lengths), sep="_")

即使“A”和“B”等的数字是不同的,这仍然有效:

vec <- c(rep("A",3),rep("B",5),rep("C",2))

n <- c("",vec[-length(vec)]) != vec
m <- (1:length(vec)) * n
idx <- (1:length(vec))-cummax(m)+1

v <- paste(vec,idx,sep="_")
相比之下:

> paste(vec,1:3,sep="_")
 [1] "A_1" "A_2" "A_3" "B_1" "B_2" "B_3" "B_1" "B_2" "C_3" "C_1"
> 

即使“A”和“B”等的数字是不同的,这仍然有效:

vec <- c(rep("A",3),rep("B",5),rep("C",2))

n <- c("",vec[-length(vec)]) != vec
m <- (1:length(vec)) * n
idx <- (1:length(vec))-cummax(m)+1

v <- paste(vec,idx,sep="_")
相比之下:

> paste(vec,1:3,sep="_")
 [1] "A_1" "A_2" "A_3" "B_1" "B_2" "B_3" "B_1" "B_2" "C_3" "C_1"
> 

关于粘贴(vec,1:3,sep=“”)?我做了有史以来最复杂的事情,请写下你的评论作为答案,我会给你分数,谢谢
元素重复了多少次
,这是否意味着输出应该是
A_3,A_3,A_3,B_3,B_3,C_3,C_3
,由于每个元素重复3次。还要注意存在
make.unique
,它的作用并不完全相同,但在精神上非常相似。那么
粘贴(vec,1:3,sep=“”)
?我正在做有史以来最复杂的事情,请写下你的评论作为答案,我会给你分数,感谢
元素重复了多少次
这不意味着输出应该是
A_3,A_3,A_3,B_3,B_3,C_3,C_3,C_3,C_3
,因为每个元素重复了3次。还要注意存在
make.unique
,这并不完全相同,但在精神上非常相似。另一种选择,我认为更简单,动态版本将是
paste(vec,sequence(rle(vec)$length),sep=“”)
另一个选项是
library(splitstackshape);粘贴(vec,getanID(vec)$.id,sep='''.'
一个替代方案,我认为更简单的动态版本应该是粘贴(vec,sequence(rle(vec)$length),sep=“”
另一个选项是
库(splitstackshape);粘贴(vec,getanID(vec)$.id,sep=''''.''