【发布时间】:2020-10-19 21:33:08
【问题描述】:
我有一个非常大的数据集,其中包含超过 50 万条对话话语。我想提取那些包含字符串well 的单词,例如jewellery 或dwelling,而不是单词well 本身。我正在使用str_extract_all:
library(stringr)
unlist(str_extract_all(X, "\\b\\w+well\\w+\\b"))
提取确实有效,但它也会为模式 不 匹配的每个话语返回 NA。我得到这样的输出:
...
[568] NA NA NA NA "jewellery" NA NA NA NA
....
我可以通过对要提取的模式的数据进行子集化来防止获得NAs:
unlist(str_extract_all(X[grepl("\\b\\w+well\\w+\\b", X)], "\\b\\w+well\\w+\\b"))
但是这样做很笨拙,而且奇怪的是,使用str_extract_all 的提取在这里称为sample 的另一个较小 数据集工作得很好,结构就像大数据集:
sample <- c("well you can use that for any argument then",
"he said well what have , what am i gon na get him poor feller !",
"that 's what he was doing , hoping i was asleep .",
"was hoping this afternoon to get the curtain rail .",
"you do tend to skip by if there 's another one that you think oh well",
"but the swellings gone down mostly i 've got gloves","is n't he ? sort of jewellery you see .",
"since you done it we 've been looking in jewellers ' shops")
unlist(str_extract_all(sample, "\\b\\w+well\\w+\\b"))
[1] "swellings" "jewellery" "jewellers"
为什么它突然在这里起作用了,更重要的是,我如何调整从大型数据集中提取目标词,以便只列出原始匹配而不列出 NA?
【问题讨论】:
-
X中有NA吗?sample[1] <- NA将为您的 smaller 数据集提供NA。unlist(str_extract_all(X[!is.na(X)], "\\b\\w+well\\w+\\b"))可能会有所帮助。 -
也许你想要
\\b\\w*well\\w+\\b|\\b\\w+well\\w*\\b而不是\\b\\w+well\\w+\\b。 -
@GKi 感谢更好的模式以及关于 NA 的提示:确实,如果我从数据集中删除 NA,则提取会按预期工作。请张贴作为答案,以便我接受!