我正试图从变量列表中创建多个二五汇总表。理想情况下,我想附加这些表。
我的数据框架看起来像这样,有多个人口统计变量、一个ID变量和一个二进制变量,用于确定该年是否是目标干预年:
身份证件
|
性别
|
种族
|
年龄类别
|
目标年份
|
1234
|
男性
|
白色
|
18-25
|
1.
|
5675
|
女性
|
亚洲的
|
30-35
|
0
|
我试图为TargetYear和人口统计变量(TargetYear+性别、TargetYear+种族等)的每种组合创建交叉表摘要。我知道我可能可以在循环或函数中完成这项工作,但到目前为止还没有成功。
在定义变量后,我最初试图通过for循环和dplyr摘要的组合来实现这一点:
library(dplyr)
library(tidyr)
variables <- c("Gender", "Race", "AgeCategory")
agg <- NULL
for (i in variables){
u <- df %>% group_by(TargetYear, (i)) %>% summarize(n=n_distinct(ID)) %>% ungroup() %>% mutate(total=sum(n)) %>% group_by(TargetYear, (i)) %>% pivot_longer((i))
return(u)
bind_rows(agg, u)
}
我期待的地方:
目标年份
|
n
|
全部的
|
名称
|
价值
|
1.
|
5.
|
30
|
性别
|
男性
|
0
|
10
|
30
|
性别
|
男性
|
1.
|
3.
|
30
|
性别
|
女性
|
0
|
12
|
30
|
性别
|
女性
|
1.
|
10
|
50
|
种族
|
白色
|
0
|
20
|
50
|
种族
|
白色
|
1.
|
23
|
50
|
种族
|
亚洲的
|
0
|
27
|
50
|
种族
|
亚洲的
|
相反,只得到一个NULL agg和一个u:
目标年份
|
(i)
|
n
|
全部的
|
0
|
性别
|
15
|
30
|
1.
|
性别
|
15
|
30
|
我对循环和函数非常陌生,所以我不确定我在这里哪里出了问题。任何帮助都将不胜感激!特别是利用循环和函数的解决方案。