0

我有很多形式的字符串,name1, name2 and name3, 0, 1, 2或者name1, name2, name3 and name4, 0, 1, 2想将向量拆分为 4 个元素,其中第一个元素是名称的整个文本字符串。问题是 strsplit 不区分文本和数字,并且在第一种情况下将字符串拆分为 5 个元素,在第二个示例中拆分为 6 个元素。如何告诉 R 动态跳过具有可变名称的字符串的文本部分?

4

2 回答 2

3

您有两个主要选择:
(1) grep 获取数字,然后提取这些数字。
(2) 在逗号上拆分,然后强制转换为数字并检查NAs

我更喜欢第二种

splat <- strsplit(x, ",")[[1]]
numbs <- !is.na(suppressWarnings(as.numeric(splat)))

c(paste(splat[!numbs], collapse=","), splat[numbs])
# [1] "name1, name2 and name3" " 0" " 1" " 2"
于 2013-10-06T20:15:54.140 回答
2

您还可以在正确的位置插入分隔符,然后拆分:

delimmed <- gsub('(.*[a-z][0-9]+| [0-9]+),','\\1%',strr)
strsplit(delimmed,'%')

正则表达式的第一部分(左侧|)匹配所有内容(.*)直到最后的字母-数字-逗号组合;第二个匹配任何空格数字逗号组合。逗号被删除(因为它在括号之外)并替换为%.

于 2013-10-06T21:55:32.357 回答