【问题标题】:Select most repeated item per row in R data.table在 R data.table 中选择每行重复次数最多的项目
【发布时间】:2022-01-14 20:34:55
【问题描述】:

晚上好。

目前我有一个 R data.table 具有以下结构

name_match1 | name_match2 | name_match3 | real_value
COCA COLA     CACAO         COCA COLA     COCA.COLA
PEPSI         PEPSI         PEPSI         PEPCSI
MONSTER       MORE          MIRINDA       MSTER

其中每个name_matchreal_value 列执行模糊匹配。 但是,在某些情况下,模糊匹配效果不佳或 real_value 可能无法/难以检测(real_value 列具有用户插入的值。这些输入在某些情况下未正确插入,因此甚至很难知道它指的是什么,就像 MSTER 案例) .

我想做的是每行选择重复次数最多的记录,如果没有,则不要选择任何类似以下示例的记录:

name_match1 | name_match2 | name_match3 | real_value | most_repeated_value | Times_repeated
COCA COLA     CACAO         COCA COLA     COCA.COLA    COCA COLA                  2
PEPSI         PEPSI         PEPSI         PEPCSI       PEPSI                      3
MONSTER       MORE          MIRINDA       MSTER        NULL                       0

但是我不知道如何在 R data.table 中执行此操作。我想知道是否有人知道执行此操作的方法?

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    如果没有唯一模式,我们可以调整How to find the statistical mode FAQ 的最佳答案以返回NA

    Mode <- function(x) {
      ux <- unique(x)
      tab = tabulate(match(x, ux))
      if(length(which(max(tab) == tab)) > 1) return(NA)
      return(ux[which.max(tab)])
    }
    

    然后我们需要将此函数应用于每一行的匹配列。

    library(data.table)
    dat = fread(text = 'name_match1  name_match2  name_match3  real_value
    "COCA COLA"     CACAO         "COCA COLA"     COCA.COLA
    PEPSI         PEPSI         PEPSI         PEPCSI
    MONSTER       MORE          MIRINDA       MSTER')
    
    dat[, result := apply(dat[, 1:3], 1, Mode)]
    dat
    #    name_match1 name_match2 name_match3 real_value    result
    # 1:   COCA COLA       CACAO   COCA COLA  COCA.COLA COCA COLA
    # 2:       PEPSI       PEPSI       PEPSI     PEPCSI     PEPSI
    # 3:     MONSTER        MORE     MIRINDA      MSTER      <NA>
    

    【讨论】:

    • 感谢@Gregor Thomas,感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 2018-01-05
    • 2015-03-21
    • 2012-07-10
    • 2023-01-16
    相关资源
    最近更新 更多