【问题标题】:R - Find max frequency and replace value without using loopR - 查找最大频率并替换值而不使用循环
【发布时间】:2016-12-15 23:10:16
【问题描述】:

我有一个医师索赔数据集,医师可以在其中提交不同专业的索赔。我想找到每个医生提交的最常用的专业,并将所有专业值替换为他们最常用的专业。

physician <- c("Mary","Mary","Mary","Mary","Mary","Bob","Bob","Bob")
specialty <- c("GP","PED","DERM","ANES","GP","DERM","GP","DERM")
data <- as.data.frame(cbind(physician,specialty))

data
physician   specialty
Mary        GP
Mary        PED
Mary        DERM
Mary        ANES
Mary        GP
Bob         DERM
Bob         GP
Bob         DERM

我正在寻找一个脚本,它可以在不使用for loop 的情况下输出以下内容:

data
physician   specialty
Mary        GP
Mary        GP
Mary        GP
Mary        GP
Mary        GP
Bob         DERM
Bob         DERM
Bob         DERM

实际的 data.frame 本身有更多的列和医生。

【问题讨论】:

    标签: r loops for-loop replace max


    【解决方案1】:

    你可以使用tapply。它将数据分组并将函数应用于每个组。

    physician_max <- tapply(data$specialty, data$physician,
                            function(s) {
                                counts <- table(s)
                                names(counts)[which.max(counts)]
                            })
    data$specialty <- physician_max[data$physician]
    

    【讨论】:

      【解决方案2】:
      t <- table(data) #summarise your data.frame
      indicator <- apply(t, # apply on the table
                         1, # margin
                         function(x) names(which.max(x))) #find the name for the max value
      data$specialty <- indicator[ data$physician] #assign the vector
      data  # print your new df
      

      【讨论】:

      • 如果 data.frame 有更多列(如 OP 所述),这可能不起作用,因为 names(which.max(x)) 可能为 NULL。
      猜你喜欢
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 2018-09-21
      • 2014-09-01
      • 1970-01-01
      • 2021-06-17
      • 2013-10-05
      • 2022-09-29
      相关资源
      最近更新 更多