【发布时间】:2020-02-13 07:47:34
【问题描述】:
我有以下列的数据框:
country<- c("CA","IN","US")
text <- c("paint red green", "painting red", "painting blue")
word <- c("green, red, blue", "red", "red, blue")
df <- data.frame(country, text, word)
对于每一行,我想在文本列中的文本中找到单词列中的单词并将它们呈现在一个新列中,因此将在文本中显示已建立的单词,以逗号分隔。 所以新列应该是:
df$new_col <- c("green,red","red","blue")
我正在使用这些代码行,但是运行起来需要很长时间,甚至崩溃。
setDT(df)[, new_col:= paste(df$word[unlist(lapply(df$word,function(x) grepl(x, df$text,
ignore.case = T)))], collapse = ","), by = 1:nrow(df)]
有没有办法更改代码以提高效率?
非常感谢!
【问题讨论】:
-
您的可重现示例很棒,但您的实际用例的性能可能在很大程度上取决于您的数据细节。例如,如果
word列的不同条目相对较少,您可能需要应用unique。也可能有其他数据结构可供探索 - 目前您的解决方案适合在文档中展示,但在分析大型数据集时可能不太有用。 -
虽然你有一个代表很好,但我看不出
setDT...代码是如何产生你想要的结果的。
标签: r performance dataframe lapply grepl