代码之家  ›  专栏  ›  技术社区  ›  Homer Jay Simpson

以R(dplyr)中的多个分组后的百分比[duplicate]

  •  0
  • Homer Jay Simpson  · 技术社区  · 4 年前

    我在R中有下表:

    身份证件 var1 var2 价值
    ID1 A. 十、 1.
    ID2 B 十、 2.
    ID3 C 十、 3.
    ID4 D 十、 4.
    ID5 A. Y 2.
    ID6 C Y 5.
    ID7 B Y 3.

    并根据dplyr中的var1和var2对_进行分组,并取每个分组的比例,得出:

    身份证件 var1 var2 价值
    ID1 A. 十、 1/3
    ID2 A. Y 2/3
    ID3 C 十、 3/8
    ID4 C Y 5/8
    ID5 B 十、 2/5
    ID6 B Y 3/5
    ID7 D 十、 1.

    我试过:

    id = c("ID1","ID2","ID3","ID4","ID5","ID6","ID7")
    var1 = c("A","B","C","D","A","C","B")
    var2 = c(rep("X",4),rep("Y",3))
    value = c(1,2,3,4,2,5,3)
    data = data.frame(id,var1,var2,value);data
    library(dplyr)
    data%>%
      group_by(var1,var2)%>%
      summarise(prop = sum(value))
    

    但它只对var1和var2进行分组。 有什么帮助吗?

    2 回复  |  直到 4 年前
        1
  •  1
  •   Kra.P    4 年前

    这可能有效

    library(dplyr)
    
    data %>%
      group_by(var1)%>%
      mutate(value = value/sum(value)) %>%
      arrange(var1, var2)
    
      id    var1  var2  value
      <chr> <chr> <chr> <dbl>
    1 ID1   A     X     0.333
    2 ID5   A     Y     0.667
    3 ID2   B     X     0.4  
    4 ID7   B     Y     0.6  
    5 ID3   C     X     0.375
    6 ID6   C     Y     0.625
    7 ID4   D     X     1 
    
        2
  •  0
  •   Yuriy Saraykin missuse    4 年前

    数据桌子

    library(data.table)
    setDT(df)[, res := proportions(value), by = var1][order(var1)]
    

    基础

    df$res<-平均值(df$value,列表(df$var1),乐趣=比例)

    推荐文章