加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – R中的正则表达式,具有负的lookbehind

发布时间:2020-12-13 22:55:11 所属栏目:百科 来源:网络整理
导读:所以我有以下数据,我们来说叫做“my_data”: Storm.TypeTYPHOONSEVERE STORMTROPICAL STORMSNOWSTORM AND HIGH WINDS 我想要的是分类my_data $Storm.Type中的每个元素是否是风暴,但是我不想将热带风暴包括在风暴中(我将分别对其进行分类),这样我就可以 Stor
所以我有以下数据,我们来说叫做“my_data”:
Storm.Type
TYPHOON
SEVERE STORM
TROPICAL STORM
SNOWSTORM AND HIGH WINDS

我想要的是分类my_data $Storm.Type中的每个元素是否是风暴,但是我不想将热带风暴包括在风暴中(我将分别对其进行分类),这样我就可以

Storm.Type                    Is.Storm
TYPHOON                       0
SEVERE STORM                  1
TROPICAL STORM                0
SNOWSTORM AND HIGH WINDS      1

我写了以下代码:

my_data$Is.Storm  <-  my_data[grep("(?<!TROPICAL) (?i)STORM"),"Storm.Type"]

但这只会将“严重的风险”作为暴风雨返回(但是忽略了雪域和高风险).谢谢!

问题是您正在寻找具有前面空格的字符串“STORM”,因此“SNOWSTORM”不符合条件.

作为一个修复,考虑将空间移动到你的负面的lookbehind断言,像这样:

ss <- c("TYPHOON","SEVERE STORM","TROPICAL STORM","SNOWSTORM AND HIGH WINDS","THUNDERSTORM")
grep("(?<!TROPICAL )(?i)STORM",ss,perl = TRUE)
# [1] 2 4 5
grepl("(?<!TROPICAL )(?i)STORM",perl = TRUE)
# [1] FALSE  TRUE FALSE  TRUE  TRUE

我不知道(?i)和(?-i)设置是否在正则表达式中忽略大小写.酷找.另一种方法是ignore.case标志:

grepl("(?<!tropical )storm",perl = TRUE,ignore.case = TRUE)
# [1] FALSE  TRUE FALSE  TRUE  TRUE

然后定义您的列:

my_data$Is.Storm  <-  grepl("(?<!tropical )storm",my_data$Storm.Type,ignore.case = TRUE)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读