【问题标题】:Find most frequently occuring string per row and its percentage查找每行最常出现的字符串及其百分比
【发布时间】:2023-01-04 22:26:16
【问题描述】:

我有一个 df,其中每一行都是一个问题,最多有 7 个答案(列),包括少数 NA。我想找到每个问题最常给出的答案及其百分比(并在有联系时返回 NA)。最终,我希望找到在答案和相应答案中达成共识 >70% 的问题。

我的数据如下所示:

dat <- data.frame(rbind(A=c("Dog", "Dog", "Cat", "Dog","Dog", "Dog", "Cat"),
                        B=c("Dog", "Cat", "Cat", "Cat", "Cat", "Cat", "Cat"),
                        C=c("Cat", "Fox", "Fox", "Fish", "Dog", "Mouse", "Rat"),
                        D=c("Mouse", "Mouse", "Mouse", "Mouse", "Mouse", "Mouse", "Mouse"),
                        E=c("Pigeon", "Pigeon", "Seagull", "Pigeon", "Seagull", "Seagull", "Pigeon"),
                        G=c("Fox", "Fox", "Fox", NA, "Dog", "Dog", "Dog")))

我知道我可以使用 which.max() 找到最常见的字符串:

dat$answer <- apply(dat,1,function(x) names(which.max(table(x))))

但是,我的目标是得到这样的结果(我只能保留最终答案,并达成 >.7 的共识)

output <- data.frame(cbind(dat[, 1:7], 
            rbind(A=c("Dog", .71),
                  B=c("Cat", .86),
                  c=c("Fox", .28),
                  D=c("Mouse", 1),
                  E=c("Pigeon", .57),
                  G=c(NA, NA))))  
colnames(output) <- c("X1", "X2", "X3", "X4", "X5", "X6", "X7", "Answer", "Perc")

非常感谢所有帮助!干杯。

【问题讨论】:

    标签: r string


    【解决方案1】:

    您可以在 apply 函数中创建一个 Perc 变量:

    dat[c("answer", "Perc")] <- 
      t(apply(dat, 1, function(x){
      c(names(sort(-table(x))[1]), max(table(x))[1] / ncol(dat))}))
    
          X1     X2      X3     X4      X5      X6     X7 answer Perc
    A    Dog    Dog     Cat    Dog     Dog     Dog    Cat    Dog 0.71
    B    Dog    Cat     Cat    Cat     Cat     Cat    Cat    Cat 0.86
    C    Cat    Fox     Fox   Fish     Dog   Mouse    Rat    Fox 0.29
    D  Mouse  Mouse   Mouse  Mouse   Mouse   Mouse  Mouse  Mouse    1
    E Pigeon Pigeon Seagull Pigeon Seagull Seagull Pigeon Pigeon 0.57
    G    Fox    Fox     Fox   <NA>     Dog     Dog    Dog    Dog 0.43
    

    如果Perc 低于阈值,则分配 NA:

    dat[dat$Perc < .7, ]$Perc <- NA
    
          X1     X2      X3     X4      X5      X6     X7 answer Perc
    A    Dog    Dog     Cat    Dog     Dog     Dog    Cat    Dog 0.71
    B    Dog    Cat     Cat    Cat     Cat     Cat    Cat    Cat 0.86
    C    Cat    Fox     Fox   Fish     Dog   Mouse    Rat    Fox <NA>
    D  Mouse  Mouse   Mouse  Mouse   Mouse   Mouse  Mouse  Mouse    1
    E Pigeon Pigeon Seagull Pigeon Seagull Seagull Pigeon Pigeon <NA>
    G    Fox    Fox     Fox   <NA>     Dog     Dog    Dog    Dog <NA>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      • 2015-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-27
      相关资源
      最近更新 更多