分割逗号分隔混合文本和数字字符串与R中的strsplit

时间:2013-10-06 20:10:01

标签: r split strsplit

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

2 个答案:

答案 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,'%')

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