Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从具有多个变量的数据集创建prop.table?_R - Fatal编程技术网

如何从具有多个变量的数据集创建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中使用更大的数据集