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=''''.''