2017-10-12 30 views
0

我很烦恼以我想要的方式总结我的数据。我想知道是否有人能指出我出错的地方。 以下是我的数据的子集。它来自于综合社会调查和我的数据集的尺寸为2x33500如何汇总数据并创建新列?

   class owngun 
32997 Middle Class  No 
8246 Working Class  No 
13613 Middle Class  Yes 
31553 Middle Class  No 
31316 Working Class  No 
20083 Middle Class  Yes 
26289 Middle Class  No 
29363 Middle Class  No 
25821 Working Class Refused 
4996 Middle Class  Yes 
14641 Middle Class  Yes 
15523 Middle Class  Yes 
27361 Working Class  Yes 
29035 Working Class  Yes 
25330 Middle Class  No 
16424 Lower Class  Yes 
17535 Working Class  No 
2841 Working Class  No 
18465 Middle Class  No 
16629 Middle Class  Yes 

当我生成一个表,我的数据集:

   owngun 
class   Yes No Refused 
    Lower Class 480 1254  21 
    Working Class 6519 8752  142 
    Middle Class 6216 8915  124 
    Upper Class 391 678  7 
    No Class   0 1  0 

我喜欢这些价值观,但我真的什么感兴趣的是每个社会阶层的比例是。我如何为每个社会阶层产生一个新的比例是?

我一直在尝试使用dplyr来做到这一点。任何人都可以提出一种方法来进行?

谢谢

+0

大概'table'或'prop.table'。 – lmo

回答

1

您可以使用dplyr的mutate功能的新列。我假设您生成的数据框的名称称为owngun。因此:

owngun = mutate(owngun, Yes_percent = Yes/(Yes + No + Refused)) 
1

使用您所提供的数据位:

table(df$class, df$owngun)/as.vector(table(df$class)) 

         No Refused  Yes 
    Lower Class 0.0000000 0.0000000 1.0000000 
    Middle Class 0.5000000 0.0000000 0.5000000 
    Working Class 0.5714286 0.1428571 0.2857143 

数据

### Your data 
df = read.table(text="class owngun 
32997 'Middle Class'  No 
8246 'Working Class'  No 
13613 'Middle Class'  Yes 
31553 'Middle Class'  No 
31316 'Working Class'  No 
20083 'Middle Class'  Yes 
26289 'Middle Class'  No 
29363 'Middle Class'  No 
25821 'Working Class' Refused 
4996 'Middle Class'  Yes 
14641 'Middle Class'  Yes 
15523 'Middle Class'  Yes 
27361 'Working Class'  Yes 
29035 'Working Class'  Yes 
25330 'Middle Class'  No 
16424 'Lower Class'  Yes 
17535 'Working Class'  No 
2841 'Working Class'  No 
18465 'Middle Class'  No 
16629 'Middle Class'  Yes", 
header=TRUE) 
0

此解决方案不使用dplyr但如何?

tab <- table(df) 
prop.table(tab, margin = 1)