R中缺少值的子组求和

时间:2017-11-21 20:21:44

标签: r

我正试图通过计算简单的Herfindahl指数 市场份额(1)^ 2 +市场份额(2)^ 2(忽略NA但用它来计算市场份额)。我尝试了几种方法,但仍然包含在我的最终HI计算中。

我的数据

df = data.frame(ID = c(1L, 1L, 1L, 2L, 2L, 2L, 4L, 4L, 4L), 
            ID_name = c("AA", "AA", "", "BB", "BB", "", "", "DD", "DD"), 
            Volume = c(10L, 20L, 30L, 50L, 50L, 40L, 20L, 30L, 10L))

我试过

    df%>%
  mutate(Hasparent_org_id = ifelse(is.na(ID_name), 0, 1)) %>%
  group_by(ID) %>%
  summarise(sum_TRx = sum(Volume),HHI =sum(((Volume/sum(Volume))^2)*Hasparent_org_id))
  • 我得到了这个

    ID MKT_Vol       HHI   (int)   (int)     (dbl) 1     1      60 0.3888889 2     2     140 0.3367347 3     4      60 0.3888889
    

但我想得到这个

bf = data.frame(ID = c(1L, 2L,  4L), 
            Volume = c(60L, 140L, 60L),
            HHI = c(0.14,0.25, 0.26 ))

基本上,包括与NA条目相对应的数量来计算市场份额,但不包括在HI计算中。

1 个答案:

答案 0 :(得分:1)

问题出在is.na检查中。 NA中有没有 Hasparent_org_id值 - 您有一些空字符串""

df%>%
  mutate(Hasparent_org_id = ifelse(ID_name=="", 0, 1)) %>%
  group_by(ID) %>%
  summarise(sum_TRx = sum(Volume),HHI =sum(((Volume/sum(Volume))^2)*Hasparent_org_id))

支票的这一变化似乎可以解决您的问题。