【问题标题】:Contingency Tables for all columns in a dataframe数据框中所有列的列联表
【发布时间】:2020-05-04 03:00:58
【问题描述】:

我有一个包含二进制数据(所有因素)的数据框,其结构如下:

数据:

convert tv radio print
0       1  1     0
1       0  1     1
0       0  0     0
1       0  0     1 

问题:

我想通过数据框的每一列获得 convert==1 的百分比,所以假设有 100 行,其中 40 个案例中 convert == '1',然后比例显示为行(#tv ==1/#convert==1)=0.98 和 (#tv==0/#convert==1)=0.02

预期结果:

value tv   radio print
0     0.02 0.42  0.70
1     0.98 0.58  0.30

目前的方法:

我在 for 循环中使用 prop.table,但它没有我认为的那么优雅

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    一种方法:跨列应用table(),然后除以条目数。

    # making some junk data
    
    df <- data.frame(
      convert = rbinom(100, 1, 0.4), 
      tv = rbinom(100, 1, 0.3),
      radio = rbinom(100, 1, 0.2),
      print = rbinom(100, 1, 0.4)
    )
    
    apply(df[df$convert == 1, -1], 2, table) / sum(df$convert == 1)
    

    -1的列条件是从表中删除第一列(琐碎的convert列)。

    【讨论】:

    • 认为我已经正确解释了你想要做什么?如果我错过了标记,请告诉我。这应该给出每列中 1 和 0 的相对比例,仅计算 convert == 1 的那些行。
    【解决方案2】:

    我们也可以使用tidyverse

    library(dplyr)
    library(purrr)
    df %>% 
       filter(convert == 1) %>%  
       select(-1) %>% 
       map_dfc(~ table(.)/length(.))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-30
      • 1970-01-01
      • 2019-11-19
      • 2014-10-22
      • 1970-01-01
      • 2015-12-29
      • 2021-07-22
      • 1970-01-01
      相关资源
      最近更新 更多