【发布时间】:2013-07-17 08:27:32
【问题描述】:
我正在解决一个问题,其中我必须有两个数据框数据和缩写,我想将数据中存在的所有缩写替换为它们各自的完整形式。到目前为止,我一直在以下列方式使用for-loops
abb <- c()
for(i in 1:length(data$text)){
for(j in 1:length(AbbreviationList$Abb)){
abb <- paste("(\\b", AbbreviationList$Abb[j], "\\b)", sep="")
data$text[i] <- gsub(abb, AbbreviationList$Fullform[j], tolower(data$text[i]))
}
}
缩写数据框如下图所示,可以使用以下代码生成
Abbreviation <- c(c("hru", "how are you"),
c("asap", "as soon as possible"),
c("bf", "boyfriend"),
c("ur", "your"),
c("u", "you"),
c("afk", "away from keyboard"))
Abbreviation <- data.frame(matrix(Abbreviation, ncol=2, byrow=T), row.names=NULL)
名称(缩写)
并且数据只是一个数据框,其中 1 列在每行中都有文本字符串,也可以使用以下代码生成。
data <- data.frame(unlist(c("its good to see you, hru doing?",
"I am near bridge come ASAP",
"Can u tell me the method u used for",
"afk so couldn't respond to ur mails",
"asmof I dont know who is your bf?")))
names(data) <- "text"
最初,我有大约 1000 个观察值和大约 100 个缩写的数据框。因此,我能够运行分析。但是现在数据已经增加到将近 50000 个,我在处理它时遇到了困难,因为有两个 for-loops 这使得处理过程非常缓慢。你能推荐一些更好的替代for-loop 并举例说明如何在这种情况下使用它。如果这个问题可以通过矢量化方法更快地解决,那么请建议如何做到这一点。
感谢您的帮助!
【问题讨论】:
-
“示例”是指我可以剪切并粘贴到我的 R 以检查我的答案的内容,而不是我必须手动重新输入的屏幕截图 :-)
-
以
dput(head(AbbreviationList))为例 -
@January 请检查更新后的描述
-
@Ankit 好的,我在答案中发现了一个错误,但现在它可以工作了。请注意,在您的原始脚本中测试时,您有“AbbreviationList”和“Abb”,但在示例中您使用了“Abbreviation”和“abb”(我也使用了后一种形式)。
-
@January 很抱歉,因为我只为你们创建了数据生成代码,所以出现了一些拼写错误......