【发布时间】:2020-04-16 15:36:57
【问题描述】:
我必须在包含文本的列的 1000 行中使用 gsub 函数。在每一行中,我想删除出现在“说:”和“点击展开...”之间的每个单词,因为它们只是之前推文的副本。我正在尝试使用gsub 来完成我的任务
content2<-as.data.frame(gsub(".*said:(.*?)expand.... *", " ", content2$txt,fixed=TRUE),stringsAsFactors = FALSE);
但是,它只是删除“说:”并展开。 content2 是对 1 个变量数据框的 100 次观察,我必须为每一行完成任务。在wiktor回复之后,我试图查看他写的那行是否有效。我仍然可以看到说:并单击以展开....在第 35 行中,所以,wiktor 的代码仅适用于我猜的第一行(无论如何不包含要删除的行)。我尝试使用 apply 未成功地将其应用于每一行,如下所示,b3eside 太慢,它给了我其他错误:
ops<-apply(content2,1,gsub("(said:).*?(click to expand\\.{3})", "\\1 \\2", content2,fixed=TRUE))
刚刚浏览了重复的帖子,它没有回答我的问题,即:如果我想替换模式之间的所有字符我应该怎么做假设我想替换“说:”和“点击到”之间的所有字符串expand" 用于 100X1 数据框的所有行。所有行都包含一组字符串,输出应该是尺寸为 100X1 的数据框:
ops<-gsub("(said:).*?(click to expand\\.{3})", "\\1 \\2", test)
@WiktorStribiżew 谢谢它似乎唯一有效的问题我也想删除“说:”和“点击展开......”我制作了以下可重现的代码,你可以看到“说:”和“点击展开...... “没有被删除。
test<-as.data.frame(c("he said: i wanna be a rockstar click to expand....ok great but how you gonna do it",
"rockstar said: so how you gonna do it click to expand.... we are wanna be a big rockstar, hang out in collest bar vip with movie star"),stringsAsFactors=FALSE)
ops<-lapply(test, gsub, pattern = '(said:).*?(click to expand\\.{3})', replacement ="\\1 \\2", perl=TRUE)
ops<-as.data.frame(ops,stringsAsFactors = FALSE)
【问题讨论】:
-
感谢您的帮助
-
@WiktorStribiżew 您编写的代码将适用于 content2 数据帧的所有列。我忘了提到 content2 是一个 20,000 obs 的数据框。 1 个变量,我想将该方法应用于 content2 的每一行。我已经尝试使用应用不成功。我会改变我的原始问题,因为我认为现在还不清楚。谢谢!!
-
那你需要
content2[] <- lapply(content2, gsub, pattern = '(said:).*?(click to expand\\.{3})', replacement ="\\1 \\2") -
你不应该使用
fixed=TRUE,你从哪里复制的?您需要正则表达式,而不是纯文本替换,请再次检查重复项。威尔逊是谁? -
我的错...想标记你。我使用了正则表达式(正则表达式,用于模式匹配)........在 str_replace_all 上重复工作,不过会再次检查它。再次感谢。
标签: apply entity-relationship gsub regex-group regex-greedy