在任何有空格的单词周围放一个 ' '

rno*_*ian 1 regex string r function dataframe

我有一些文本数据 ( dat),其中一个变量State, 可以包含一些单词和一些空格,例如New York.

为了正确读取数据,我需要将整个字符串中的任何字符串元素dat放在单引号中,如下所示:New York--> 'New York'

我想知道这是否有可能实现?

dat <-
"State Expend PTratio Salary PctSAT SAT PctACT ACT
Montana 5.692 16.3 28.785 21 1009 55 21.9
New York 9.774 13.8 46.087 70 898 3 20.8
"
# EXAMPLE OF USE:
read.table(text = dat, header = T) # Error! But if we use 'New York' works fine!
Run Code Online (Sandbox Code Playgroud)

akr*_*run 5

如果它是基于列“国家”的模式,那么我们可以插入''用于不包括数字(的话\\D+),捕获为一组,后面跟一个空格和一个或多个数字((\\d+)-捕捉为第二组),在 中replacement,指定被捕获组的反向引用(\\1, \\2),并在第一个捕获组周围插入引号

read.table(text = gsub("\n(\\D+\\s*\\D+) (\\d+)",
           "\n'\\1' \\2", dat), header = TRUE)
#    State Expend PTratio Salary PctSAT  SAT PctACT  ACT
#1  Montana  5.692    16.3 28.785     21 1009     55 21.9
#2 New York  9.774    13.8 46.087     70  898      3 20.8
Run Code Online (Sandbox Code Playgroud)

OP 提到了该列是否位于不同的位置。这里我们使用模式,即如果列在第 n 个位置并且直接邻居是数字,则使用它来创建模式

dat1 <- "Expend PTratio Salary PctSAT SAT State PctACT ACT\n5.692 16.3 28.785 21 1009 Montana 55 21.9\n 9.774 13.8 46.087 70 898 New York 3 20.8\n"
read.table(text = gsub("(\\d+)\\s+([A-Za-z ]+) (\\d+)",
         "\\1 '\\2' \\3", dat1), header = TRUE)
# Expend PTratio Salary PctSAT  SAT    State PctACT  ACT
#1  5.692    16.3 28.785     21 1009  Montana     55 21.9
#2  9.774    13.8 46.087     70  898 New York      3 20.8
Run Code Online (Sandbox Code Playgroud)