如何从具有多个变量的数据集创建prop.table?
我有一个如下所示的数据集:如何从具有多个变量的数据集创建prop.table?,r,R,我有一个如下所示的数据集: YEAR ID_HOUSEHOLD Size n_fem n_male n_Sec_Edu n_High_Edu n_emp n_noemp n_stud poverty_t 2017 320 5 2 3 0 0 1 1 3 -1 2017 300 1 1 0
YEAR ID_HOUSEHOLD Size n_fem n_male n_Sec_Edu n_High_Edu n_emp n_noemp n_stud poverty_t
2017 320 5 2 3 0 0 1 1 3 -1
2017 300 1 1 0 0 0 0 1 1 2
2017 150 6 3 3 4 1 2 1 4 1
2017 170 3 3 1 2 1 2 0 0 0
2017 420 4 2 2 0 4 2 0 2 -1
2017 430 2 1 1 0 2 2 0 2 0
从这个表中,我想创建一个prop表,根据上一个变量的类型,告诉所有变量的比例。我想按行计算比例,即第一行应说明样本中女性在1、1、0和2组中所占的比例
对于第一行,我将n_female=12(2+1+3+3+2+1)的值相加。然后对每个类别的值求和,然后除以总和:
-1 1 0 2
n_female (4/12)0.33 (3/12)0.25 (4/12)0.33 (1/12)0.083
n_male
n_sec_edu
n_high_edu
n_emp
n_noemp
n_stu
使用
sapply
和tapply
可以执行以下操作:
cols <- 4:10
t(sapply(df[cols], function(x) tapply(x, df$poverty_t, sum)/sum(x)))
# -1 0 1 2
#n_fem 0.3333333 0.3333333 0.2500000 0.08333333
#n_male 0.5000000 0.2000000 0.3000000 0.00000000
#n_Sec_Edu 0.0000000 0.3333333 0.6666667 0.00000000
#n_High_Edu 0.5000000 0.3750000 0.1250000 0.00000000
#n_emp 0.3333333 0.4444444 0.2222222 0.00000000
#n_noemp 0.3333333 0.0000000 0.3333333 0.33333333
#n_stud 0.4166667 0.1666667 0.3333333 0.08333333
cols使用sapply
和tapply
可以执行以下操作:
cols <- 4:10
t(sapply(df[cols], function(x) tapply(x, df$poverty_t, sum)/sum(x)))
# -1 0 1 2
#n_fem 0.3333333 0.3333333 0.2500000 0.08333333
#n_male 0.5000000 0.2000000 0.3000000 0.00000000
#n_Sec_Edu 0.0000000 0.3333333 0.6666667 0.00000000
#n_High_Edu 0.5000000 0.3750000 0.1250000 0.00000000
#n_emp 0.3333333 0.4444444 0.2222222 0.00000000
#n_noemp 0.3333333 0.0000000 0.3333333 0.33333333
#n_stud 0.4166667 0.1666667 0.3333333 0.08333333
cols这里有一个整洁的方法:
图书馆(tibble)
dat%>%
选择(-YEAR,-ID\u house,-Size)%%>%
支点更长(!贫困)%>%
枢轴(名称从=贫困,值从=值,值从=和)%>%
列到行名称(“名称”)%>%
变异(rs=行和(%)%>%
在(变量(!rs),~./rs)%>%处突变
选择(-rs)
诀窍是首先pivot\u long
将值整齐地排列在一列中,然后pivot\u wide
将poverty\u t
数据作为列显示出来,然后在这些列上进行行和规范化。这里有一个整洁的方法:
图书馆(tibble)
dat%>%
选择(-YEAR,-ID\u house,-Size)%%>%
支点更长(!贫困)%>%
枢轴(名称从=贫困,值从=值,值从=和)%>%
列到行名称(“名称”)%>%
变异(rs=行和(%)%>%
在(变量(!rs),~./rs)%>%处突变
选择(-rs)
诀窍是首先pivot\u long
将值整齐地排列在一列中,然后pivot\u wide
将poverty\u t
数据作为列显示,然后在这些列上对行和进行规范化。这里有一个冗长而繁琐的dplyr和看门人方法
library(dplyr)
library(janitor)
dat <- read.table(textConnection("YEAR ID_HOUSEHOLD Size n_fem n_male n_Sec_Edu n_High_Edu n_emp n_noemp n_stud poverty_t
2017 320 5 2 3 0 0 1 1 3 -1
2017 300 1 1 0 0 0 0 1 1 2
2017 150 6 3 3 4 1 2 1 4 1
2017 170 3 3 1 2 1 2 0 0 0
2017 420 4 2 2 0 4 2 0 2 -1
2017 430 2 1 1 0 2 2 0 2 0
"), stringsAsFactors=FALSE
)
colnames(dat) <- dat[1,]
dat <- dat[-1,]
d <- dat %>%
mutate(poverty_t = as.factor(poverty_t)) %>%
mutate_at(vars(starts_with("n")),function(x) as.numeric(as.character(x))) %>%
group_by(poverty_t) %>%
summarize(n_fem = sum(n_fem),
n_male = sum(n_male),
n_Sec_Edu = sum(n_Sec_Edu),
n_High_Edu = sum(n_High_Edu),
n_emp = sum(n_emp),
n_noemp = sum(n_noemp),
n_stud = sum(n_stud)) %>%
t() %>%
data.frame()
colnames(d) <- c("minus_one", "zero", "one", "two")
d <- d[-1,]
d$variable <- row.names(d)
d2 <- d %>%
mutate_at(vars(minus_one:two),function(x) as.numeric(as.character(x))) %>%
adorn_percentages(,,minus_one:two) %>%
adorn_rounding(,,minus_one:two)
库(dplyr)
图书馆(看门人)
dat%
总结(n_fem=总结(n_fem),
n_男性=总和(n_男性),
n_Sec_Edu=总和(n_Sec_Edu),
n_High_Edu=总和(n_High_Edu),
n_emp=总和(n_emp),
n_noemp=总和(n_noemp),
n_螺柱=总和(n_螺柱))%>%
t()%>%
data.frame()
colnames(d)这里有一个长长的、多风的dplyr和看门人方法
library(dplyr)
library(janitor)
dat <- read.table(textConnection("YEAR ID_HOUSEHOLD Size n_fem n_male n_Sec_Edu n_High_Edu n_emp n_noemp n_stud poverty_t
2017 320 5 2 3 0 0 1 1 3 -1
2017 300 1 1 0 0 0 0 1 1 2
2017 150 6 3 3 4 1 2 1 4 1
2017 170 3 3 1 2 1 2 0 0 0
2017 420 4 2 2 0 4 2 0 2 -1
2017 430 2 1 1 0 2 2 0 2 0
"), stringsAsFactors=FALSE
)
colnames(dat) <- dat[1,]
dat <- dat[-1,]
d <- dat %>%
mutate(poverty_t = as.factor(poverty_t)) %>%
mutate_at(vars(starts_with("n")),function(x) as.numeric(as.character(x))) %>%
group_by(poverty_t) %>%
summarize(n_fem = sum(n_fem),
n_male = sum(n_male),
n_Sec_Edu = sum(n_Sec_Edu),
n_High_Edu = sum(n_High_Edu),
n_emp = sum(n_emp),
n_noemp = sum(n_noemp),
n_stud = sum(n_stud)) %>%
t() %>%
data.frame()
colnames(d) <- c("minus_one", "zero", "one", "two")
d <- d[-1,]
d$variable <- row.names(d)
d2 <- d %>%
mutate_at(vars(minus_one:two),function(x) as.numeric(as.character(x))) %>%
adorn_percentages(,,minus_one:two) %>%
adorn_rounding(,,minus_one:two)
库(dplyr)
图书馆(看门人)
dat%
总结(n_fem=总结(n_fem),
n_男性=总和(n_男性),
n_Sec_Edu=总和(n_Sec_Edu),
n_High_Edu=总和(n_High_Edu),
n_emp=总和(n_emp),
n_noemp=总和(n_noemp),
n_螺柱=总和(n_螺柱))%>%
t()%>%
data.frame()
colnames(d)你能在表格中填写更多的数据来显示你想要什么吗?我已经编辑了这个问题,但总的来说,我想找到每行每列的比例。我不知道如何将第一个数据集的每一列的值相加,根据最后一个变量按列进行分布,并得到比例。您是如何进行计算的?你能解释一下第一行的计算吗?我已经编辑了第一行。基本上,我会把n_female=12的值加起来(2+1+3+3+2+1)。然后对每个类别的值求和,然后除以总数。我不知道如何使用更大的数据集来实现这一点,你能在表格中填写更多的数据来显示你想要的吗?我已经编辑了这个问题,但总的来说,我想按列查找每行的比例。我不知道如何将第一个数据集的每一列的值相加,根据最后一个变量按列进行分布,并得到比例。您是如何进行计算的?你能解释一下第一行的计算吗?我已经编辑了第一行。基本上,我会把n_female=12的值加起来(2+1+3+3+2+1)。然后对每个类别的值求和,然后除以总数。我不知道如何在R中使用更大的数据集