Reputation: 99
I am having troubling summarizing my data the way I want it. I was wondering if someone could point out where I was going wrong. Below is a subset of my data. It came from the General Social Survey and the dimensions of my data set were 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
When I generate a table for my dataset:
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
I like these values, but what I'm really interested in is the proportions of yes for each social class. How do I generate a new column of the proportions of yes for each social class?
I have been trying to use dplyr to do this. Can anyone suggest a way to proceed?
Thank you
Upvotes: 0
Views: 1688
Reputation: 491
This solution doesn't use dplyr but how about:
tab <- table(df)
prop.table(tab, margin = 1)
Upvotes: 0
Reputation: 178
You can create a new column using dplyr's mutate
function. I am assuming the name of the dataframe you generated is called owngun. Therefore:
owngun = mutate(owngun, Yes_percent = Yes/(Yes + No + Refused))
Upvotes: 1
Reputation: 37641
Using the bit of data that you provided:
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
Data
### 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)
Upvotes: 1