我有许多name1, name2 and name3, 0, 1, 2
或name1, name2, name3 and name4, 0, 1, 2
形式的字符串,并希望将向量拆分为4个元素,其中第一个元素是整个文本字符串的名称。问题是strsplit不区分文本和数字,并在第一种情况下将字符串拆分为5个元素,在第二个示例中拆分为6个元素。如何告诉R动态跳过具有可变数量名称的字符串的文本部分?
答案 0 :(得分:2)
您有两个主要选择:
(1)grep为数字,并提取那些
(2)拆分逗号,然后强制转换为数字并检查NA
s
我更喜欢第二个
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"
答案 1 :(得分:2)
您还可以在正确的位置插入分隔符,然后拆分:
delimmed <- gsub('(.*[a-z][0-9]+| [0-9]+),','\\1%',strr)
strsplit(delimmed,'%')
正则表达式的第一部分(|
的左侧)匹配所有内容(.*
),直到最后的字母数字逗号组合;第二个匹配任何空格数字逗号组合。逗号被删除(因为它在括号外)并被%
取代。