r - 有没有办法检测一个字符串,然后在 R 中删除它的一个子集?
问题描述
我有一个非常大的数据集,我想从中检测一个特定的字符串,在整个评论的某个地方,然后从中删除空格。这是一个例子:
包含Happy Meal的字符串应替换为HappyMeal 或 包含芝士汉堡餐的字符串应替换为cheeseburgermeal
以下是我尝试过的所有方法:
1.
data %>% pull(body) %>%
str_replace_all(c("happy meal" = "happymeal", "chicken nuggets meal" = "chickennuggetsmeal",
"chicken legend meal" = "chickenlegendmeal",
"double cheeseburger meal" = "doublecheeseburgermeal"))
上面的代码执行没有错误,所以我没有输出可以共享,但是当我检查数据集时,更改仍然不存在。 (编辑)分配后,我得到一长串 5000000 个字符,这不是我想要的,我希望正文中的各个评论保持分开。
2.
str_remove(str_detect(("happy meal|chicken nuggets meal|chicken legend meal|double cheeseburger meal")), " ")
输出
Error in str_remove(., str_detect(("happy meal|chicken nuggets meal|chicken legend meal|double cheeseburger meal")), : unused argument (" ")
data$body <- str_remove(str_detect(data$body,
("happy meal|chicken nuggets meal|chicken legend meal|double cheeseburger meal")), " ")
此输出也会执行,但会将 body 中的所有值作为布尔值返回,我知道这是因为string _detect()
返回一个布尔值。我尝试过的另一种方法是为整个正文字符串分配一个新变量,它只返回一个极长的字符串。我可能会犯一些非常愚蠢的错误,但是,我似乎无法弄清楚在获取没有空格的字符串时犯了什么错误,因此感谢您的帮助!
解决方案
替换所有空格
如果要从列中的所有条目中删除空格,可以使用
# Load dplyr for `mutate()` and `%>%`
library(dplyr)
data %>%
mutate(body = gsub(" ", "", body))
根据字符串长度替换
如果您只想在条目body
大于一定数量的字符(例如 20)时应用上述内容,则可以执行以下操作:
data %>%
mutate(body = ifelse(nchar(body > 20), gsub(" ", "", body), body))
仅替换一些空格
最后,如果您只想替换某些字符串中的一些空格,您可以使用(如您所建议的那样)。这也将替换子字符串,因此例如“买了一顿快乐餐和两杯草莓奶昔”将变成“买了一份快乐餐和两杯草莓奶昔”。stringr::str_replace_all()
replace_vals <- c("happy meal", "chicken nuggets meal", "chicken legend meal",
"double cheeseburger meal")
data %>%
mutate(body = stringr::str_replace_all(
string = body,
# Values to replace
pattern = replace_vals,
# For replacements we can just remove the spaces from `replace_vals`
replacement = gsub(" ", "", replace_vals)
))
保存结果
请注意,要将这些更改中的任何一个永久应用于您的,data
您将需要重新分配结果。例如data <- data %>% # ...code that changes stuff
推荐阅读
- testing - 如何在 Spectron 中“等待”关闭窗口?
- c++ - 关于GCC编译器编译代码块和Visual Studio
- java - 如何使用 Java 设置 Selenium WebDriver?
- javascript - 您如何获取附件的 url 并将它们发布到控制台 discord.js 中?
- regex - 如何扩展花括号?
- angular - providedIn: 'platform' 但在根目录中注入了依赖项
- python-3.8 - python3.8使用异步获取无效的sysntax
- angular - 如何在 Angular 材质中创建动态多级菜单
- go - 如何使用 GORM 对规范化表进行正确的模型关联?
- azure - “传入的数组无效...”当我尝试将字符串作为参数传递给 Azure 自定义脚本扩展中的 powershell 函数时