如何在R中删除字符变量指定内容以完成鸡尾酒配料数据清洗?
你可以用正则表达式一次性匹配所有需要删除的内容,单条命令就能完成清洗,不需要分步操作。
首先针对你给出的示例向量测试效果:
library(stringr) ingredients <- c("1 1/2 oz Plymouth gin", "1 oz egg white", "3/4 oz lemon juice", "2 oz rye (50% abv)", "2 oz white rum (40% abv)", "3/4 oz lime juice", "3/4 oz honey syrup") # 清洗逻辑:匹配两类要删除的内容,用|分隔 cleaned_ingredients <- str_remove(ingredients, "^.*?(oz|dashes)\\s*|\\s*\\(.*$")
运行后得到的结果就是你需要的纯配料名:
[1] "Plymouth gin" "egg white" "lemon juice" "rye" "white rum" "lime juice" "honey syrup"
正则逻辑说明
^.*?(oz|dashes)\\s*:匹配从字符串开头到oz或dashes的所有内容,同时去掉这两个单位后面跟着的空格|:逻辑或,匹配前后任意一种规则的内容\\s*\\(.*$:匹配括号前的空格、括号以及括号里直到字符串末尾的所有内容
如果要在dplyr管道中处理数据框的多列配料(比如ingredient1、ingredient2...),可以用across批量操作,不需要每列单独写mutate:
library(dplyr) library(stringr) df <- df %>% mutate(across(starts_with("ingredient"), ~ str_remove(.x, "^.*?(oz|dashes)\\s*|\\s*\\(.*$")))
内容的提问来源于stack exchange,提问作者Adél Jenifer Kovács
相关产品推荐
相关产品推荐

