我需要在 R 中每五个单词(或左右)拆分一个字符串。给定输入:
x <- c("one, two, three, four, five, six, seven, eight, nine, ten")
我想要输出:
[1] "one, two, three, four, five"
[2] "six, seven, eight, nine, ten"
是否有正则表达式或函数来完成此操作?
最佳答案
这是一个适用于单长度 x
的函数。
x <- c("one, two, three, four, five, six, seven, eight, nine, ten")
#' @param x Vector
#' @param n Number of elements in each vector
#' @param pattern Pattern to split on
#' @param ... Passed to strsplit
#' @param collapse String to collapse the result into
split_every <- function(x, n, pattern, collapse = pattern, ...) {
x_split <- strsplit(x, pattern, perl = TRUE, ...)[[1]]
out <- character(ceiling(length(x_split) / n))
for (i in seq_along(out)) {
entry <- x_split[seq((i - 1) * n + 1, i * n, by = 1)]
out[i] <- paste0(entry[!is.na(entry)], collapse = collapse)
}
out
}
library(testthat)
expect_equal(split_every(x, 5, pattern = ", "),
c("one, two, three, four, five",
"six, seven, eight, nine, ten"))
关于r - 在 R 中用 n 个单词拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46260274/