r - 使用通配符 r 删除文本替换
问题描述
我想删除作为向量一部分的几个文本字符串的一部分。我要删除的实例是#.##oz。其中 # 是 1 到 9(含)之间的任何整数。
FoodVector <- c("kraft easy mac cup 2.05oz each", "tuna kit bumble bee 3.05oz each", "lance cheddar cheese wh grain 1.50oz each", "some item 1.0oz")
结果应该是:
[1] kraft easy mac cup each
[2] tuna kit bumble bee each
[3] lance cheddar cheese wh grain each
[4] some item 1.0oz
对于这样的事情,我通常会使用 gsub() 或 str-replace()。但是我无法弄清楚通配符语言。例如
gsub("*.**oz", "", FoodVector)
结果是:
Error in gsub("*.**", "", FoodVector) :
invalid regular expression '*.**', reason 'Invalid use of repetition operators'
解决方案
您可以使用 gsub 删除单个数字的所有实例,然后是 a .
,然后是两位数,然后是空格。
注意:您的描述说的是 1 到 9 之间的整数,没有提到空格。此解决方案查找 0 到 9 之间的数字并查找空格,以匹配问题中显示的结果
gsub('\\d{1}\\.\\d{2}oz ', '', FoodVector)
# [1] "kraft easy mac cup each"
# [2] "tuna kit bumble bee each"
# [3] "lance cheddar cheese wh grain each"
# [4] "some item 1.0oz"
为了解决 Rui 在下面的观点,您可以允许空间位于 d.ddoz 之前或之后
FoodVector <- c(FoodVector, '1.23oz some words', 'more words 3.45oz')
gsub('\\d{1}\\.\\d{2}oz | \\d{1}\\.\\d{2}oz', '', FoodVector)
# [1] "kraft easy mac cup each"
# [2] "tuna kit bumble bee each"
# [3] "lance cheddar cheese wh grain each"
# [4] "some item 1.0oz"
# [5] "some words"
# [6] "more words"
推荐阅读
- vue.js - v-on:select="myFunction" 事件永远不会被触发
- asp.net - 使用 maxWorkerThreads 调整 web.config 时出现内部服务器错误 500
- react-native - FlatList renderItem 错误,TypeError:未定义(评估“item.id”)
- javascript - 当存在 div 时,如何防止视频在后台播放?
- oracle - 从包 A 过程调用时,表插入在包 B 过程中不起作用
- javascript - 在 Quasar 页面消费 Api
- python - PyLint W0108: Lambda may not be > necessary (unnecessary-lambda)
- python - 获取缩写和定义的程序 - 获取所有小写缩写的麻烦
- javascript - 我的sidenav颜色没有随按钮改变(onclick)
- postgresql - Postgres 错误 08001(SQLCLIENT 无法建立 SQLCONNECTION)和 FOC1394 错误