首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何计算排除自有公司的行业中位数

如何计算排除自有公司的行业中位数
EN

Stack Overflow用户
提问于 2019-06-21 02:01:14
回答 2查看 69关注 0票数 0

我需要为公司样本创建一个新列,其中包含某个行业内的中位数ETR变量(原文如此)。

但是,在计算ETR的行业(原文如此)中值之前,我需要排除自己的公司。

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

任何帮助都将不胜感激。

谢谢!

示例数据:

代码语言:javascript
运行
复制
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

应该变成:

代码语言:javascript
运行
复制
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。

EN

回答 2

Stack Overflow用户

发布于 2019-06-21 02:49:25

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

  • by (用于分组为子集dfs)
  • sapply (遍历固体值并调用median)
  • unlist (用于将列表转换为向量,用于df列绑定)

总而言之:

代码语言:javascript
运行
复制
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
票数 2
EN

Stack Overflow用户

发布于 2019-06-21 07:31:45

代码语言:javascript
运行
复制
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或您选择的任何方式应用它:

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56691561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档