【问题标题】:R, split string to pairs of characterR,将字符串拆分为字符对
【发布时间】:2016-06-13 19:49:15
【问题描述】:

如何按以下方式在 R 中拆分字符串?请看例子

example:

c("ex", "xa", "am", "mp", "pl", "le")?

【问题讨论】:

标签: r


【解决方案1】:
x = "example"
substring(x, first = 1:(nchar(x) - 1), last = 2:nchar(x))
# [1] "ex" "xa" "am" "mp" "pl" "le"

当然,你可以把它包装成一个函数,也许可以省略非字母(我不知道冒号是否应该是你的字符串的一部分)等等。

要对字符串向量执行此操作,您可以将其用作带有lapply 的匿名函数:

lapply(month.name, function(x) substring(x, first = 1:(nchar(x) - 1), last = 2:nchar(x)))
# [[1]]
# [1] "Ja" "an" "nu" "ua" "ar" "ry"
# 
# [[2]]
# [1] "Fe" "eb" "br" "ru" "ua" "ar" "ry"
# 
# [[3]]
# [1] "Ma" "ar" "rc" "ch"
# ...

或者把它做成一个命名函数并按名字使用它。如果您经常使用它,这将是有意义的。

str_split_pairs = function(x) {
    substring(x, first = 1:(nchar(x) - 1), last = 2:nchar(x))
}

lapply(month.name, str_split_pairs)
## same result as above

【讨论】:

  • 好的,我有一个字符串向量(字符)。如何从中获取此类对的向量?
【解决方案2】:

这是另一种选择(虽然它比@Gregor 的回答慢):

x=c("example", "stackoverflow", "programming")

lapply(x, function(i) {
  i = unlist(strsplit(i,""))
  paste0(i, lead(i))[-length(i)]
})
[[1]]
[1] "ex" "xa" "am" "mp" "pl" "le"

[[2]]
[1] "st" "ta" "ac" "ck" "ko" "ov" "ve" "er" "rf" "fl" "lo" "ow"

[[3]]
[1] "pr" "ro" "og" "gr" "ra" "am" "mm" "mi" "in" "ng"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 2019-04-16
    相关资源
    最近更新 更多