R中根据table生成重复字符的字符串
Generate strings of repeated characters according to table in R
我想根据 table.
生成一系列具有一定数量符号的字符串
给出以下 table:
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 个“.”再次,如 table.
的第一行中指定
我想遍历 table 中每一行的三列,以生成一个字符串向量,其中的元素(字符串)与 table 中的行一样多n "." 的规范和每个符号中的 m 个“x”符号。
我一直在用 rep 测试一些不同的方法来迭代 table 但无法访问工作代码...
有什么帮助吗?
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 of "."
,适当的长度
replace(..., st:ed, "X")
采用 start:end
向量并将 "."
替换为 "X"
paste(., collapse = "")
将 向量 折叠成一个字符串
虽然 sapply
和 lapply
遍历单个向量或列表,但 mapply
(和 Map
)“压缩”多个相同长度vectors/lists一起,一个接一个。我们上面对 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]), ...)
来自 base 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"]]
来提高函数的可读性。
我想根据 table.
生成一系列具有一定数量符号的字符串给出以下 table:
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 个“.”再次,如 table.
的第一行中指定我想遍历 table 中每一行的三列,以生成一个字符串向量,其中的元素(字符串)与 table 中的行一样多n "." 的规范和每个符号中的 m 个“x”符号。
我一直在用 rep 测试一些不同的方法来迭代 table 但无法访问工作代码...
有什么帮助吗?
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 of"."
,适当的长度replace(..., st:ed, "X")
采用start:end
向量并将"."
替换为"X"
paste(., collapse = "")
将 向量 折叠成一个字符串虽然
相同sapply
和lapply
遍历单个向量或列表,但mapply
(和Map
)“压缩”多个相同长度vectors/lists一起,一个接一个。我们上面对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]), ...)
来自 base 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"]]
来提高函数的可读性。