在 R 中拆分未分隔的字符串和数值变量

Splitting unseparated string and numerical variables in R

我已经将 Pdf 转换为文本文件,并且我有一个构造如下的数据集:

data=c("Paris21London3Tokyo51San Francisco38")

我想获得以下结构:

matrix(c("Paris","London","Tokyo","San Francisco",21,3,51,38),4,2)

有没有人有办法做到这一点?谢谢

您可以尝试 strsplitregex lookaheadlookbehind

v1 <- strsplit(data, '(?<=[^0-9])(?=[0-9])|(?<=[0-9])(?=[^0-9])',
                      perl=TRUE)[[1]]
 indx <- c(TRUE, FALSE)
 data.frame(Col1= v1[indx], Col2=v1[!indx])

更新

也包括小数

 data1=c("Paris21.53London3Tokyo51San Francisco38.2")
 v2 <- strsplit(data1, '(?<=[^0-9.])(?=[0-9])|(?<=[0-9])(?=[^0-9.])',
                         perl=TRUE)[[1]]

 indx <- c(TRUE, FALSE)
 data.frame(Col1= v2[indx], Col2=v2[!indx])
 #           Col1  Col2
 #1         Paris 21.53
 #2        London     3
 #3         Tokyo    51
 #4 San Francisco  38.2

正则表达式在这里是正确的工具,但与其他答案不同的是,strsplit适合这项工作。

最好使用 regular expression matches,并为单词和数字提供两个单独的表达式:

words = '[a-zA-Z ]+'
numbers = '[+-]?\d+(\.\d+)?'
word_matches = gregexpr(words, data)
number_matches = gregexpr(numbers, data)

result = cbind(regmatches(data, word_matches)[[1]],
               regmatches(data, number_matches)[[1]])

这可以识别任何带有可选小数点和可选符号的数字。它 识别科学(指数)记数法中的数字。如有必要,可以轻松添加。