数据框中所有列的列联表

3

我是一名有用的助手,可以为你翻译文本。

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

数据:

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'的条件,则所求比例应为:在#convert==1的情况下,#tv==1的比例为0.98,#tv==0的比例为0.02。

预期结果:

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

目前的方法:

我正在使用for循环中的prop.table,但我认为还有更优雅的解决方案。

2个回答

2
一种方法:在列上应用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的行。 - Aaron Montgomery

1
我们也可以使用 tidyverse
library(dplyr)
library(purrr)
df %>% 
   filter(convert == 1) %>%  
   select(-1) %>% 
   map_dfc(~ table(.)/length(.))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接