r - 在任何包含空格的单词周围放置一个 ' '
问题描述
我有一些文本数据 ( 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!
解决方案
如果它基于“状态”列的模式,那么我们可以''
为不包含数字 ( \\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
如果该列位于不同的位置,则提到了 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
推荐阅读
- kubernetes - 使用其他规则检查 k8s 命名空间中的注释的 OPA Rego 规则
- python - 不能按条件替换值?
- python - 上传的 Youtube Data API v3 视频未处理为高清
- python - 如何在数据帧火花中的多行中工作并在多行中更新列
- java - 你如何在像素数组中画一条线
- pandas - Python将列表拆分为给定长度的子列表
- python - XPATH 以文本嵌套标签为目标
标签
- bazel - 在 Bazel 工具链配置文件中获取包的运行时路径
- reactjs - 选择后使 mui 自动完成持久化输入值
- docker - Dockerfile 可以用 docker-compose.yaml 替换吗?