r - 如何将字符串的一部分减去到我的数据框中的新变量中?
问题描述
我需要我从一个变量中减去字符串的一部分来创建一个新变量
我有例如
df <- c(" 3 Rue d Argentine 16th arr 75116 Paris France",
"5 Passage Ruelle 18th arr 75018 Paris France", " 1 Avenue Carnot 17th arr 75017 Paris France", "Bis Rue De Vaugirard 6th arr 75006 Paris France", "6 Impasse Marteau 18th arr 75018 Paris France" ," 1 Place De La Sorbonne 5th arr 75005 Paris France", "1 Place Vend me 1st arr 75001 Paris France")
我想要的是一个减去区的新变量,所以我的新数据框变成
adress: " 3 Rue d Argentine 16th arr 75116 Paris France",
"5 Passage Ruelle 18th arr 75018 Paris France", " 1 Avenue Carnot 17th arr 75017 Paris France", "Bis Rue De Vaugirard 6th arr 75006 Paris France", "6 Impasse Marteau 2nd arr 75018 Paris France" ," 1 Place De La Sorbonne 5th arr 75005 Paris France", "1 Place Vend me 1st arr 75001 Paris France"
arr: "16th", "18th", "17th", "6th", "2nd", "5th", "1st"
等任何人都可以帮助我如何在 R 中做到这一点?
解决方案
基本 R 方法可以是:
unlist(regmatches(df, gregexpr("\\b(\\S+)(?=\\sarr)", df, perl=TRUE)))
# [1] "16th" "18th" "17th" "6th" "18th" "5th" "1st"
在这里使用gsub
可能是一个错误,因为如果arr
找不到,那么它将返回整个字符串。
如果您更愿意使用stringr
,那么
stringr::str_extract(df, "\\b(\\S+)(?=\\sarr)")
# [1] "16th" "18th" "17th" "6th" "18th" "5th" "1st"
两个正则表达式都使用“前瞻”。模式分解:
\\b
词界;这不包括任何字符,它确保其左侧和/或右侧的模式在此处有一些空格(\\S+)
一个或多个 (+
) 非空格字符 (\\S
)(?=\\sarr)
是一个前瞻,确保在所需的模式之后找到封闭的文本(\\s
是一个空格,和文字),但它不是“消耗的”;使用这个需要arr
perl=TRUE
使用基本 R 版本,gregexpr
返回在输入的每个元素中找到模式的索引列表 ( df
),并且可用于提取(如此处)甚至替换 ( `regmatches<-`
)。
推荐阅读
- powerbuilder - Appeon Mobile - 从 URL 下载文件
- python - Conda 安装包 ModuleNotFoundError:没有名为“conda”的模块
- c# - Azure REST Api 创建经典部署模型存储帐户
- amazon-web-services - 如何在单个 AWS EC2 实例中部署多个 Springboot 微服务
- javascript - 如何通过按文本集成警报?(在 React Native 中)
- kubernetes - Kubernetes 更新容器镜像
- python - 使用 django 在网页上传递错误消息
- html - 替代显示:Safari 中的内容
- angular - 如何从 Angular 中的 HTML 选择中获取价值
- excel - 查找符合条件的第一个集合