R语言数据框基于多月份提取结果拆分重复行的实现方法
你用str_extract_all得到的city_months是列表格式的列,只需追加一步unnest()函数即可将列表内的每个元素拆分为单独行,原有其他列内容会自动重复保留。
另外注意你现有正则的规则存在缺陷:正向前瞻(?=\\sin)仅对july生效,april和may不会校验后续是否跟有in,会提取到文本中所有出现的对应月份,不符合你「仅提取城市前的月份」的需求,需要把三个月份放在分组内,让前瞻规则对所有月份生效。
完整可运行代码如下:
library(tidyverse) # 构造原始数据 details <- "I stay in april in Barcelona, after in may in Paris and finally in july in London. april is a cool month. july has very hot temperatures" df <- as.data.frame(details) # 提取并拆分为多行 dfmonths <- df %>% mutate(city_months = str_extract_all(details, "(april|may|july)(?=\\sin)")) %>% unnest(city_months)
运行后输出结果和你需要的效果完全一致:
# A tibble: 3 × 2 details city_months <chr> <chr> 1 I stay in april in Barcelona, after in may in Paris and finally in july in London. april is a cool mo… april 2 I stay in april in Barcelona, after in may in Paris and finally in july in London. april is a cool mo… may 3 I stay in april in Barcelona, after in may in Paris and finally in july in London. april is a cool mo… july
如果使用的是旧版本tidyr,调整unnest的参数写法即可:unnest(cols = city_months)。
内容的提问来源于stack exchange,提问作者Wilcar
相关产品推荐
相关产品推荐

