【问题标题】:proportion of factors and dummies因子和虚拟变量的比例
【发布时间】:2020-11-11 08:38:15
【问题描述】:

我有一个充满因子和假人的数据集,我想看看dplyr::group_by(cyl)之后每个值的比例

 mtcars; rownames(mtcars) <- NULL
    df <- mtcars[,c(2,8,9)]
    head(df)
     cyl vs am
    1   6  0  1
    2   6  0  1
    3   4  1  1
    4   6  1  0
    5   8  0  0
    6   6  1  0

预期的答案 我在cyl 6 6 6 6 中为vs 列,其中第二列是 1 其中两个 0

   1    0
6 50% 50%
4 100% 0%
8 0%   100%

am 列也一样

【问题讨论】:

  • 你能用你的例子说明你想要的输出a应该是什么样子吗?目前,它看起来像是您的五个因素的列表,并且每个因素都有每个级别的比例。
  • 你好,我加了。像 prob.table(table())

标签: r dplyr lapply tidyr data-manipulation


【解决方案1】:

这是第一次破解:

(df 
    %>% pivot_longer(-cyl)       ## spread out variables (vs, am)
    %>% group_by(cyl,name)   
    %>% mutate(n=n())            ## obs per cyl/var combo
    %>% group_by(cyl,name,value) 
    %>% summarise(prop=n()/n)    ## proportion of 0/1 per cyl/var  
    %>% unique()                 ## not sure why I need this?
    %>% pivot_wider(id_cols=c(cyl,name),names_from=value,values_from=prop)
)

结果:

   cyl name     `0`    `1`
  <dbl> <chr>  <dbl>  <dbl>
1     4 am    0.273   0.727
2     4 vs    0.0909  0.909
3     6 am    0.571   0.429
...

【讨论】:

  • 一个问题是我认为当特定结果为零时它会产生 NA; StackOverflow 上有很多问题(我认为)可以解释如何处理这个问题,例如stackoverflow.com/questions/60523702/…
猜你喜欢
  • 1970-01-01
  • 2018-03-29
  • 1970-01-01
  • 2019-06-25
  • 1970-01-01
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多