如何解决根据R中的表生成重复字符的字符串
给定下表:
Length Start End
40 15 20
50 18 23
45 12 19
40 13 18
. . .
. . .
. . .
我想生成一个字符串列表,其长度为 column1 并带有“.”。符号,并表示字符串中从开始(第 2 列)到结束(第 3 列)位置的“。”符号改为“x”符号。
[1] "..............XXXXXX...................."
[2] ".................XXXXXX..........................."
[3] "...........XXXXXXXX.........................."
[4] "............XXXXXX......................"
例如,对于第一个元素,有 14 个“.”,然后是 5 个“X”,然后是 20 个“.”。再次,如表第一行中所指定。
我想遍历表中每行的三列,以生成一个字符串向量,其元素(字符串)与表中的行一样多,遵循 n "." 的规范。和 m 个“x”符号。
我一直在用 rep 测试一些不同的方法来迭代表,但无法获得工作代码...
有什么帮助吗?
解决方法
myfunc <- function(len,st,ed) paste(replace(rep(".",len),st:ed,"X"),collapse = "")
mapply(myfunc,dat$Length,dat$Start,dat$End)
# [1] "..............XXXXXX...................." ".................XXXXXX..........................."
# [3] "...........XXXXXXXX.........................." "............XXXXXX......................"
演练:
-
rep(".",len)
开始这个过程,创建一个 vector"."
,适当的长度 -
replace(...,"X")
采用start:end
向量并将"."
替换为"X"
-
paste(.,collapse = "")
将 vector 折叠成单个字符串 -
虽然
相同sapply
和lapply
迭代单个向量或列表,但mapply
(和Map
)将多个相同长度的向量/列表“压缩”在一起,一一。我们上面对mapply
的一次调用实际上与c(myfunc(dat$Length[1],dat$Start[1],dat$End[1]),myfunc(dat$Length[2],dat$Start[2],dat$End[2]),myfunc(dat$Length[3],dat$Start[3],dat$End[3]),...)
从基础 R strrep
在这里可以很好地工作:
f <- function(x) paste0(strrep(".",x[[2]] - 1),strrep("X",x[[3]]-x[[2]]),strrep(".",x[[3]]))
apply(df,1,FUN = f)
[1] "..............XXXXX...................."
[2] ".................XXXXX......................."
[3] "...........XXXXXXX..................."
[4] "............XXXXX.................."
您可以通过将 x[[2]]
更改为 x[["Start"]]
并将 x[[3]]
更改为 x[["End"]]
来使函数更具可读性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。