我已经将Pdf转换为文本文件,我有一个数据集,其构造如下:
data=c("Paris21London3Tokyo51San Francisco38")
我想获得以下结构:
matrix(c("Paris","London","Tokyo","San Francisco",21,3,51,38),4,2)
有没有人有办法做到这一点?感谢
答案 0 :(得分:4)
您可以strsplit
regex
和lookahead
lookbehind
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
答案 1 :(得分:1)
正则表达式是正确的工具,但与其他答案显示不同,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]])
这可识别带有可选小数点和可选符号的任何数字。它不以科学(指数)表示法识别数字。如有必要,可以简单地添加。