strsplit
位于 base
包(package)。 说明
根据其中子字符串 split
的匹配,将字符向量 x
的元素拆分为子字符串。
用法
strsplit(x, split, fixed = FALSE, perl = FALSE, useBytes = FALSE)
参数
x |
字符向量,其中的每个元素都要被分割。其他输入(包括因子)将给出错误。 |
split |
包含用于分割的 regular expression (除非 |
fixed |
合乎逻辑的。如果 |
perl |
合乎逻辑的。应该使用 Perl 兼容的正则表达式吗? |
useBytes |
合乎逻辑的。如果 |
细节
参数 split
将被强制转换为字符,因此您将看到与 split = NULL
一起使用来表示 split = character(0)
,包括在下面的示例中。
请注意,可以通过 split = character(0)
或 split = ""
来拆分为单个字符;两者是等价的。这里 ‘character’ 的定义取决于语言环境:在单字节语言环境中,它是一个字节,在多字节语言环境中,它是由“宽字符”表示的单位(几乎总是 Unicode 代码点)。
split
的缺失值根本不会拆分 x
的相应元素。
应用于每个输入字符串的算法是
repeat { if the string is empty break. if there is a match add the string to the left of the match to the output. remove the match and all to the left of it. else add the string to the output. break. }
请注意,这意味着如果在(非空)字符串的开头存在匹配项,则输出的第一个元素是 ""
,但如果在字符串的末尾存在匹配项,则输出是与删除匹配项相同。
另请注意,如果非空字符串开头存在空匹配,则返回第一个字符,并且算法继续处理字符串的其余部分。在设计正则表达式时需要牢记这一点。例如,当查找后跟字母的单词边界( "[[:<:]]"
和 perl = TRUE
)时,可以禁止在字符串开头进行匹配(通过 "(?!^)[[:<:]]"
)。
当前语言环境中的无效输入将被警告最多 5 次。
值
与 x
长度相同的列表,其中第 i
元素包含 x[i]
的分割向量。
如果 x
或 split
的任何元素被声明为 UTF-8 格式(请参阅 Encoding
),则结果中的所有非 ASCII 字符串都将采用 UTF-8 格式,并将其编码声明为 UTF-8 。 (如果任何元素被声明为 Latin-1,除了在 Latin-1 语言环境中之外,这也成立。)对于 perl = TRUE, useBytes = FALSE
,多字节语言环境中的所有非 ASCII 字符串都将转换为 UTF-8。
如果 x
或 split
的任何元素被标记为 "bytes"
(参见 Encoding
),则结果中拆分创建的所有非 ASCII 字符串将被标记为 "bytes"
,但结果的编码未分割的字符串未指定(可能是"bytes"
或原始字符串)。如果 x
或 split
中没有元素被标记为 "bytes"
,而是标记为 useBytes = TRUE
,则即使通过拆分创建的结果字符串的编码也是未指定的(可能是 "bytes"
或 "unknown"
,可能在当前编码)。不鼓励混合使用 "bytes"
和其他标记编码,但如果仍然需要,可以使用 iconv
重新编码结果,例如转换为 UTF-8,并适当替换无效字节。
例子
noquote(strsplit("A text I want to display with spaces", NULL)[[1]])
x <- c(as = "asfef", qu = "qwerty", "yuiop[", "b", "stuff.blah.yech")
# split x on the letter e
strsplit(x, "e")
unlist(strsplit("a.b.c", "."))
## [1] "" "" "" "" ""
## Note that 'split' is a regexp!
## If you really want to split on '.', use
unlist(strsplit("a.b.c", "[.]"))
## [1] "a" "b" "c"
## or
unlist(strsplit("a.b.c", ".", fixed = TRUE))
## a useful function: rev() for strings
strReverse <- function(x)
sapply(lapply(strsplit(x, NULL), rev), paste, collapse = "")
strReverse(c("abc", "Statistics"))
## get the first names of the members of R-core
a <- readLines(file.path(R.home("doc"),"AUTHORS"))[-(1:8)]
a <- a[(0:2)-length(a)]
(a <- sub(" .*","", a))
# and reverse them
strReverse(a)
## Note that final empty strings are not produced:
strsplit(paste(c("", "a", ""), collapse="#"), split="#")[[1]]
# [1] "" "a"
## and also an empty string is only produced before a definite match:
strsplit("", " ")[[1]] # character(0)
strsplit(" ", " ")[[1]] # [1] ""
也可以看看
paste
用于相反,grep
和 sub
用于字符串搜索和操作;还有nchar
、substr
。
‘regular expression’了解模式规范的详细信息。
选项 PCRE_use_JIT
控制 perl = TRUE
时的详细信息。
相关用法
- R strtoi 将字符串转换为整数
- R strrep 重复字符向量的元素
- R strwrap 将字符串换行以设置段落格式
- R strptime 与字符之间的日期时间转换函数
- R strtrim 将字符串修剪为指定的显示宽度
- R structure 属性规范
- R stop 停止函数执行
- R standardGeneric 形式化方法系统 – 调度 S4 方法
- R startsWith 字符串是否以另一个字符串开头或结尾?
- R stopifnot 确保 R 表达式的真实性
- R seq.Date 生成规则的日期序列
- R search 给出 R 对象的搜索路径
- R solve 求解方程组
- R scan 读取数据值
- R sprintf 使用 C 风格字符串格式化命令
- R sign 标志函数
- R svd 矩阵的奇异值分解
- R source 从文件、连接或表达式中读取 R 代码
- R sQuote 引用文字
- R switch 选择替代方案列表之一
- R substitute 替换和引用表达式
- R split 分组并重新集合
- R slice.index 数组中的切片索引
- R sort 对向量进行排序或排序
- R sequence 创建序列向量
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Split the Elements of a Character Vector。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。