gpt4 book ai didi

r - 将向量折叠为具有相应连续出现次数的字符串

转载 作者:行者123 更新时间:2023-12-04 10:18:36 26 4
gpt4 key购买 nike

我想将 CIGAR 向量折叠为 CIGAR 字符串。通过 CIGAR 向量到字符串,我的意思如下:

我想要一个可以转换的函数:

cigar.vector = c("M", "M", "I", "I", "M", "I", "", "M", "D", "D", "M", "I", "D", "M", "I")

对此:
cigar.string = "2M2I1M1I1M2D1M1I1D1M1I"

反之亦然。

请注意,有一个“”(空字符),这不算数。谢谢!

最佳答案

rle似乎是显而易见的选择:

rcv <- rle(cigar.vector[cigar.vector!=""])
paste0(rcv$lengths,rcv$values,collapse="")
#[1] "2M2I1M1I1M2D1M1I1D1M1I"

如果你想花哨,你也可以利用 rle 的事实。给出长度为 2 的列表:
paste(do.call(rbind,rle(cigar.vector[cigar.vector!=""])),collapse="")
#[1] "2M2I1M1I1M2D1M1I1D1M1I"

如果只给出结果(上面分配给 result ),则不可能向后倒退,因为它丢失了 "" 的信息。案件。排除这些情况,您可以通过以下方式接近:
backwards <- rep(
unlist(strsplit(result,"\\d+"))[-1],
as.numeric(unlist(strsplit(result,"[^0-9]")))
)
identical(cigar.vector[cigar.vector!=""],backwards)
#[1] TRUE

关于r - 将向量折叠为具有相应连续出现次数的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18969698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com