如何在tidyverse中反转逗号分隔内容后拆分列为多列
问题需求
我们需要先反转用, 分隔的字符串中元素的顺序(例如将“CA, SF”转为“SF, CA”),再将其拆分为多列。
示例数据与期望结果
library(tidyverse) # 示例数据 tbl <- tibble( letter = c("US, CA, SF","NYC", "Florida, Miami") ) # 期望结果 tbl_desired <- tibble( country = c("US", NA, NA), state = c("CA", NA, "Florida"), city = c("SF", "NYC", "Miami") )
修改后的代码实现
通过字符串拆分、反转、重新拼接的步骤,再配合拆分填充逻辑,可得到期望结果:
tbl %>% mutate(letter = str_split(letter, ", ") %>% map_chr(~ str_c(rev(.), collapse = ", "))) %>% separate(letter, into = c("country", "state", "city"), sep = ", ", fill = "left")
代码说明
str_split(letter, ", "):将每个字符串按,拆分为字符向量map_chr(~ str_c(rev(.), collapse = ", ")):对拆分后的向量进行反转,再用,拼接回字符串separate(..., fill = "left"):拆分时左侧不足的位置自动填充NA,匹配期望结果的列对应关系
内容的提问来源于stack exchange,提问作者SiH
相关产品推荐
相关产品推荐

