如何对tibble中的字符串进行拆分,将球队名称拆分为城市和吉祥物两列
实现代码(基于tidyverse生态,可直接运行)
library(tidyverse) # 直接复用你原有的原始球队文本,不需要手动修改原始数据 raw_team_text <- "City, Mascot, Arizona Diamondbacks Atlanta Braves Baltimore Orioles Boston Red Sox Chicago White Sox Chicago Cubs Cincinnati Reds Cleveland Indians Colorado Rockies Detroit Tigers Houston Astros Kansas City Royals Los Angeles Angels Los Angeles Dodgers Miami Marlins Milwaukee Brewers Minnesota Twins New York Yankees New York Mets Oakland Athletics Philadelphia Phillies Pittsburgh Pirates San Diego Padres San Francisco Giants Seattle Mariners St. Louis Cardinals Tampa Bay Rays Texas Rangers Toronto Blue Jays Washington Nationals " # 自动清洗+拆分逻辑 team_tibble <- raw_team_text %>% # 去掉开头的冗余表头行 str_remove("^City, Mascot,\\n") %>% # 按换行拆分出每支球队的条目 str_split("\\n") %>% unlist() %>% # 清除每行前后的多余空格 str_trim() %>% # 过滤掉空行 .[str_length(.) > 0] %>% # 转为基础tibble tibble(team_full = .) %>% # 按自定义规则拆分城市和吉祥物 separate_wider_regex( team_full, patterns = c( # 城市匹配规则,后续有新增/修改球队直接调整这里的列表即可手动微调 City = r"^(Arizona|Atlanta|Baltimore|Boston|Chicago|Cincinnati|Cleveland|Colorado|Detroit|Houston|Kansas City|Los Angeles|Miami|Milwaukee|Minnesota|New York|Oakland|Philadelphia|Pittsburgh|San Diego|San Francisco|Seattle|St. Louis|Tampa Bay|Texas|Toronto|Washington)", " ", # 匹配城市和吉祥物中间的分隔空格 Mascot = ".*$" # 剩余部分全部归为吉祥物 ) )
兼容低版本tidyr的替代写法
如果你的tidyr版本低于1.2.0不支持separate_wider_regex,可以把拆分部分替换为extract函数实现同样效果:
team_tibble <- raw_team_text %>% str_remove("^City, Mascot,\\n") %>% str_split("\\n") %>% unlist() %>% str_trim() %>% .[str_length(.) > 0] %>% tibble(team_full = .) %>% extract( team_full, into = c("City", "Mascot"), regex = r"^(Arizona|Atlanta|Baltimore|Boston|Chicago|Cincinnati|Cleveland|Colorado|Detroit|Houston|Kansas City|Los Angeles|Miami|Milwaukee|Minnesota|New York|Oakland|Philadelphia|Pittsburgh|San Diego|San Francisco|Seattle|St. Louis|Tampa Bay|Texas|Toronto|Washington) (.*)$" )
最终输出的tibble已经拆分好City和Mascot两列,City字段可以直接用来和其他数据表做关联匹配。
内容的提问来源于stack exchange,提问作者RuSXSnIpERXx
相关产品推荐
相关产品推荐

