【问题标题】:Quickly calculate difference wordcount dataframes快速计算差异字数数据帧
【发布时间】:2019-02-10 04:32:26
【问题描述】:

一段时间以来,我一直在为以下问题苦苦挣扎:

我想计算两个数据帧之间的字数差异(特征出现的频率)。数据框包含两列:特征(词)和频率。

我想用 df A en df B 实现以下结果: df A 中的所有特征/单词和 A 的频率减去 B 的频率。但是,当 A 中的特征没有出现在 B 中时,我想要 A 的频率回来。

我尝试了两个 sapply 函数:1 获得名称向量名称:A 的特征和频率,1 获得 B 中相同特征的频率,如果该特征存在,否则为 0。这两个然后将向量组合起来以获得所需的数据帧。该解决方案有效,但速度非常慢。

你们中有人知道获得此类结果的更快方法吗?

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    这里你想要的基本操作是第一个数据帧到第二个数据帧的左连接,使用特征/单词作为连接条件。一种选择是使用sqldf 包:

    library(sqldf)
    sql <- "select a.feature, a.frequency - coalesce(b.frequency, 0) as difference "
    sql <- paste0(sql, "from dfA a left join dfB b on a.feature = b.feature")
    
    result <- sqldf(sql)
    

    这可能不是 R 中最快的解决方案,而基本 R 可能提供更有效的解决方案。但是,上面的解决方案很简单,只需要几行代码,而且很容易阅读。

    【讨论】:

    • 离场! SQL,太棒了。谢谢,我在网上搜索了 R 和 SQL,还发现 merge(x = df1, y = df2, by = "CustomerId", all.x = TRUE) 进行了左连接。 (来源:stackoverflow.com/questions/1299871/…
    • 是的,但是您还必须处理第二个数据帧上的合并部分。此外,我发现merge 可能会很混乱,无法获得您想要的确切输出。但无论您喜欢哪种方法都可以。
    【解决方案2】:

    您可以为此使用整洁的文本挖掘。

    请参考以下链接。 tidy text mining

    【讨论】:

      猜你喜欢
      • 2014-01-06
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-21
      相关资源
      最近更新 更多