R表,2个因子变量,无法生成列百分比

时间:2019-01-25 14:37:08

标签: r

我想将两个因子变量放入表/交叉表中,以获取各个类别的频率。我想将这些频率表示为列百分比,即仅对每列的计数进行 计算(每列的总和应为100%)。

每当我使用prop.table(tab1, 2)执行脚本时,R都会返回似乎是列百分比的百分比,其中每个类别占整个样本的一部分,而不仅是列频率(我还要注意数据是经过加权的,尽管我可以不加权重地重复这个问题。

我经过艰苦的搜索以找到解决方案,但到目前为止没有任何效果。我曾尝试将表转换为矩阵和数据框,但这并没有帮助。我尝试使用其他软件包,xtabs()和其他功能。

以下是相关代码:

# Raw data import | will make copy for editing.

rawdata = read.csv(file.choose(), header = TRUE)
data = rawdata

# Install Rcmdr for wtd.table() function

install.packages("Rcmdr")
library(Rcmdr)

# Create table

tab1 <- wtd.table(data$occ, data$degree, weights = data$PERWT)
tab1

prop.table(tab1, 2)
prop.table(tab1, 2)*100

对于加权计数,该表没有问题(对于实际数据,有15个学位类别和26个职位类别):

        Deg1    Deg2    Deg3    Deg4    Deg5    
Job1    1000    1000    1000    1000    1000    
Job2    2000    2000    2000    2000    2000    
Job3    3000    3000    3000    3000    3000    
Job4    4000    4000    4000    4000    4000   
Job5    5000    5000    5000    5000    5000 

当我运行prop.table(tab1, 2)时,我期望这样的事情:

        Deg1    Deg2    Deg3    Deg4    Deg5    
Job1    0.07    0.07    0.07    0.07    0.07 
Job2    0.13    0.13    0.13    0.13    0.13  
Job3    0.20    0.20    0.20    0.20    0.20 
Job4    0.27    0.27    0.27    0.27    0.27 
Job5    0.33    0.33    0.33    0.33    0.33 

但是,我实际上得到的是看起来是基于整个样本的奇异数字,而不仅仅是基于该列,例如:

        Deg1           
Job1    5.088906e-03
Job2    1.94034e-02
Job3    6.236119e-03
Job4    4.495131e-02
Job5    1.315560e-01

此模式在所有15个学位和所有26个工作类别中重复。运行prop.table(tab1, 2)*100无效:值保持完全相同,不受乘法的影响。

我在这里很茫然,作为一个新的R用户,我确定自己在犯一些容易犯的错误。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我们可以将prop.tableapply一起使用:

apply(tab, 2, prop.table)

第二个参数2指定将prop.table应用于矩阵/数据帧的每个

输出:

           Deg1       Deg2       Deg3       Deg4       Deg5
Job1 0.06666667 0.06666667 0.06666667 0.06666667 0.06666667
Job2 0.13333333 0.13333333 0.13333333 0.13333333 0.13333333
Job3 0.20000000 0.20000000 0.20000000 0.20000000 0.20000000
Job4 0.26666667 0.26666667 0.26666667 0.26666667 0.26666667
Job5 0.33333333 0.33333333 0.33333333 0.33333333 0.33333333

数据:

tab <- structure(c(1000L, 2000L, 3000L, 4000L, 5000L, 1000L, 2000L, 
3000L, 4000L, 5000L, 1000L, 2000L, 3000L, 4000L, 5000L, 1000L, 
2000L, 3000L, 4000L, 5000L, 1000L, 2000L, 3000L, 4000L, 5000L
), .Dim = c(5L, 5L), .Dimnames = list(c("Job1", "Job2", "Job3", 
"Job4", "Job5"), c("Deg1", "Deg2", "Deg3", "Deg4", "Deg5")))