正则表达式 – 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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |