首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除R中字符串中不同位置以特定字符(@)开头的任何内容?

如何删除R中字符串中不同位置以特定字符(@)开头的任何内容?
EN

Stack Overflow用户
提问于 2021-09-14 01:55:33
回答 1查看 40关注 0票数 2

我有一个包含多条tweet的专栏:

代码语言:javascript
复制
ID | Tweet
1    @ChipotleTweets @ChipotleTweets Becky is very nice
2    Happy Halloween! I now look forward to $3 booritos at @ChipotleTweets
3    Considering walking to @.ChipotleTweets in my llama onesie.

这样做的目的是删除“@___”和@之后的所有内容,但不删除该字符串之外的空格文本。

目前正在使用这段代码来检测'@‘,但是如果它不在句子的第一个位置,我就不会发现任何东西

代码语言:javascript
复制
tweet_pattern <- " @\\w+"

Customer <- Customer %>% 
           clean_Tweet = ifelse(str_detect(text, tweet_pattern), 
                                str_remove(text, tweet_pattern), 
                                NA_character_))

所需输出:

代码语言:javascript
复制
ID | Tweet                                                                  | cleaned_tweet 
1    @ChipotleTweets @ChipotleTweets Becky is very nice                       Becky is very nice
2    Happy Halloween! I now look forward to $3 booritos at @ChipotleTweets    Happy Halloween! I now look forward to $3 booritos at
3    Considering walking to @.ChipotleTweets in my llama onesie.              Considering walking to in my llama onesie.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-14 01:57:37

我们可以更改模式以匹配零个或多个空格(\\s*),后跟@str_remove_all中的一个或多个非空格(\\S+),以删除这些子字符串

代码语言:javascript
复制
library(stringr)
library(dplyr)
Customer %>%
     mutate(Cleaned_Tweet = str_remove_all(Tweet, "\\s*@\\S+"))

-output

代码语言:javascript
复制
 ID                                                                 Tweet                                         Cleaned_Tweet
1  1                    @ChipotleTweets @ChipotleTweets Becky is very nice                                    Becky is very nice
2  2 Happy Halloween! I now look forward to $3 booritos at @ChipotleTweets Happy Halloween! I now look forward to $3 booritos at
3  3           Considering walking to @.ChipotleTweets in my llama onesie.            Considering walking to in my llama onesie.

注意:str_remove只删除了match的第一个实例,也就是说,如果一个字符串中有多个匹配,它会跳过其他的,只匹配第一个。我们需要str_remove_all来删除匹配模式的所有实例。

数据

代码语言:javascript
复制
Customer <- structure(list(ID = 1:3, Tweet = c("@ChipotleTweets @ChipotleTweets Becky is very nice", 
"Happy Halloween! I now look forward to $3 booritos at @ChipotleTweets", 
"Considering walking to @.ChipotleTweets in my llama onesie."
)), class = "data.frame", row.names = c(NA, -3L))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69170914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档