【发布时间】:2020-03-28 23:15:44
【问题描述】:
如何在 R 中移动字符串。 我有一个字符串“叶子”,当我左移时,结果应该是“跳蚤”。
我试过shift()函数。
但我无法理解如何对字符串的每个字母执行此操作。
谁能帮帮我
【问题讨论】:
如何在 R 中移动字符串。 我有一个字符串“叶子”,当我左移时,结果应该是“跳蚤”。
我试过shift()函数。
但我无法理解如何对字符串的每个字母执行此操作。
谁能帮帮我
【问题讨论】:
您可以将以下解决方案与函数shifter(s,n)一起使用,其中n是要移位的位置数(可以是零,任何正整数或负整数,不限于字符串s的长度):
shifter <- function(s, n) {
n <- n%%nchar(s)
if (n == 0) {
s
} else {
paste0(substr(s,nchar(s)-n+1,nchar(s)), substr(s,1,nchar(s)-n))
}
}
示例
s <- "leaf"
> shifter(s,0)
[1] "leaf"
> shifter(s,1) # shift to right by 1
[1] "flea"
> shifter(s,-1) # shift to left by 1
[1] "eafl"
【讨论】:
您可以将其转换为原始向量,并通过对最后一个和其余部分进行子集化来组合此向量。
tt <- charToRaw("leaf")
rawToChar(c(tt[length(tt)], tt[-length(tt)])) #Right shift
#[1] "flea"
rawToChar(c(tt[-1], tt[1])) #Left shift
#[1] "eafl"
如果您有扩展字符,您可以使用(感谢@KonradRudolph 的评论)
tt <- strsplit("Äpfel", '')[[1L]]
paste(c(tt[length(tt)], tt[-length(tt)]), collapse = "") #Right shift
#[1] "lÄpfe"
paste0(c(tt[-1], tt[1]), collapse = "") #Left shift
#[1] "pfelÄ"
或使用utf8ToInt 和intToUtf8。
tt <- utf8ToInt("Äpfel")
intToUtf8(c(tt[length(tt)], tt[-length(tt)]))
#[1] "lÄpfe"
intToUtf8(c(tt[-1], tt[1]))
#[1] "pfelÄ"
【讨论】:
strsplit(s, '')[[1L]] 后跟paste 更安全(尽管代码更多)。