【问题标题】:How to Calculate Industry Medians with Own Firm Excluded如何计算不包括自己公司的行业中位数
【发布时间】:2019-06-20 18:01:13
【问题描述】:

我需要为公司样本创建一个新列,其中包含某个行业 (SIC) 中 ETR 变量的中值。

但是,在计算 ETR 的行业 (SIC) 中位数之前,我需要排除自己的公司。

有没有人对我如何做到这一点有任何建议?

任何帮助将不胜感激。

谢谢!

样本数据:

Firm SIC ETR
1   20  10
2   20  15
3   20  20
4   20  25
5   20  30
6   21  50
7   21  55
8   21  60
9   21  65
10  21  70

应该变成:

Firm SIC ETR ETR_Median
1   20  10  22.5
2   20  15  22.5
3   20  20  20
4   20  25  17.5
5   20  30  17.5
6   21  50  62.5
7   21  55  62.5
8   21  60  60
9   21  65  57.5
10  21  70  57.5

因此,例如,当仅考虑同一行业 (SIC) 中的其他公司时,公司 #4 的行业 (SIC) 中位数为 17.5。

【问题讨论】:

    标签: r median


    【解决方案1】:

    考虑按 SIC 组进行拆分,并遍历其所有 Firm 值以从 median 计算中排除。具体来说,使用:

    • by(用于分组到子集dfs)
    • sapply(遍历Firm值并调用median
    • unlist(将列表转换为向量以进行 df 列绑定)

    总共:

    df$ETR_median <- unlist(by(df, df$SIC, function(sub)
        sapply(sub$Firm, function(f) median(sub$ETR[sub$Firm != f]))
    ))
    
    df
    
    #    Firm SIC ETR ETR_median
    # 1     1  20  10       22.5
    # 2     2  20  15       22.5
    # 3     3  20  20       20.0
    # 4     4  20  25       17.5
    # 5     5  20  30       17.5
    # 6     6  21  50       62.5
    # 7     7  21  55       62.5
    # 8     8  21  60       60.0
    # 9     9  21  65       57.5
    # 10   10  21  70       57.5
    

    【讨论】:

    • 很高兴听到并乐于提供帮助!
    • 不要忘记 StackOverflow 的说法 thanks 并结束您的问题。
    【解决方案2】:

    您可以在进行中位数计算之前创建一个排除当前观测值的函数:

    median_excl <- function(x){
      # pre-allocate our result vector:
      med_excl <- vector(length = length(x))
      # loop through our vector, excluding the current index and taking the median:
      for(i in seq_along(x)){
        x_excl <- x[-i]
        med <- median(x_excl)
    
        med_excl[i] <- med
      }
      return(med_excl)
    }
    

    然后只需使用 dplyr 或您选择的任何方式应用它:

    df %>% group_by(SIC) %>% mutate(ETR_Median = median_excl(ETR))
    
    #    Firm SIC ETR ETR_median
    # 1     1  20  10       22.5
    # 2     2  20  15       22.5
    # 3     3  20  20       20.0
    # 4     4  20  25       17.5
    # 5     5  20  30       17.5
    # 6     6  21  50       62.5
    # 7     7  21  55       62.5
    # 8     8  21  60       60.0
    # 9     9  21  65       57.5
    # 10   10  21  70       57.5
    

    【讨论】:

    • 非常感谢你,克里斯!
    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    相关资源
    最近更新 更多