R 如何根据第三个变量的形式乘以分析?
我正在处理一个大型数据库,在这个数据库中,我想根据第三个(也是第四个)变量的模式生成链表(x),并汇总结果。我有点阻塞,我不知道怎么做 以下是我的数据帧(数据)的结构: 每一行都是独立的。他有一个年龄,他是死是活,他有一个职业(这是一篇专栏文章,其中包含一个职业代码:“02”是科学的,“88”是冶金工人,“A0”是军人等等)和一个性别(男/女) 我只是想创建死亡率表。这很容易:R 如何根据第三个变量的形式乘以分析?,r,automation,aggregate,R,Automation,Aggregate,我正在处理一个大型数据库,在这个数据库中,我想根据第三个(也是第四个)变量的模式生成链表(x),并汇总结果。我有点阻塞,我不知道怎么做 以下是我的数据帧(数据)的结构: 每一行都是独立的。他有一个年龄,他是死是活,他有一个职业(这是一篇专栏文章,其中包含一个职业代码:“02”是科学的,“88”是冶金工人,“A0”是军人等等)和一个性别(男/女) 我只是想创建死亡率表。这很容易: table(data$age, data$dead) 以下是完整数据库的结果,例如: age dead=0 d
table(data$age, data$dead)
以下是完整数据库的结果,例如:
age dead=0 dead=1
.. .... .
25 1725 0
26 3627 1
27 336 0
28 3339 1
30 275648 856
31 90932 258
32 120743 268
33 587954 1023
36 148610 57
39 5101 7
40 15960 43
41 102273 336
42 147941 174
43 69216 43
44 43178 37
45 3074 0
47 1424 1
48 3471 1
49 12048 3
50 85 0
51 45138 110
52 84804 147
53 4614 16
54 19241 46
55 86021 160
.. .... .
现在,我想对变量“work”的每个类别都这样做。手动操作,可以轻松处理特定类别,例如科学:
table(data$age[data$class=="02"],data$dead[data$class=="02"])
我正在搜索如何自动执行此操作:
1) 对于工作变量的每个类别。变量不是连续的(…,11,12,13,14,19,20,…),有时还有字母(A0,Z0)
2) 对于每个类别,我想区分男性和女性(科学男性和科学女性的表格)
3) 然后将多个表(数据)的结果聚合到一个数据帧中,其中连接是过时的。因此,每一列都是按年龄、性别和职业划分的个体数量
你能帮我吗
多谢各位 函数table()
可以创建任意级别的列联表。您可以传递整个数据帧,然后展平和重塑(假设我理解正确)
library(tidyr)
表(df)%>%
as.data.frame()%>%
轴宽(名称从=年龄,值从=频率)
#A tibble:36 x 11
死工作性'19``20``26``44``51``56``71``77`
1 0 01 F 0 0 0 0 0 0 0 0
2 1 01 F 0 0 0 0 0 0
3 0 13 F 0 0 0 1 0 0 0 0 0
4113f00
5 0 20 F 0 1 0 0 0 0 0 0 0
6120F000
7 0 44 F 0 0 0 0 0 0
8144F000
9 0 62 F 0 0 0 0 0 1 0
10162F000
# ... 还有26行
从那里,您可以根据需要进一步分割、重塑或过滤
数据:
df如果您在代码中提供示例data.frame会更容易,例如data.frame(age=c(56,20,…),dead=c(1,0,…),…
可以告诉您,但我并不真正理解代码。如果我在表(data)上使用您的代码,我会有一个错误:表中的错误(megapop):尝试创建一个包含>=2^31个元素的表。因此,我只在3个维度上创建了一个表:年龄、死亡、工作。在这种情况下:在.f(.x[[I]],…)中出错:对象“age”可插入。因此,我提到了数据$age而不是age,我有一个错误:在inds_combine(.vars,ind_list)中出错:位置必须介于0和n之间。对不起,我不是R:p中最好的。什么是频率?包DescTools的功能?好的,我理解为:“as.data.frame”name“age”为“Var1”。在使用“pivot\u wide”之前,我必须重命名它。
table(data$age[data$class=="02"],data$dead[data$class=="02"])
library(tidyr)
table(df) %>%
as.data.frame() %>%
pivot_wider(names_from = age, values_from = Freq)
# A tibble: 36 x 11
dead work sex `19` `20` `26` `44` `51` `56` `71` `77`
<fct> <fct> <fct> <int> <int> <int> <int> <int> <int> <int> <int>
1 0 01 F 0 0 0 0 0 0 0 0
2 1 01 F 0 0 0 0 0 0 0 0
3 0 13 F 0 0 0 0 1 0 0 0
4 1 13 F 0 0 0 0 0 0 0 0
5 0 20 F 0 1 0 0 0 0 0 0
6 1 20 F 0 0 0 0 0 0 0 0
7 0 44 F 0 0 0 0 0 0 0 0
8 1 44 F 0 0 0 0 0 0 0 0
9 0 62 F 0 0 0 0 0 0 1 0
10 1 62 F 0 0 0 0 0 0 0 0
# ... with 26 more rows
df <- structure(list(age = c(56L, 20L, 71L, 26L, 44L, 19L, 77L, 51L,
56L), dead = c(1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L), work = structure(c(4L,
3L, 5L, 8L, 7L, 1L, 6L, 2L, 9L), .Label = c("01", "13", "20",
"44", "62", "78", "80", "A0", "Z0"), class = "factor"), sex = structure(c(2L,
1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L), .Label = c("F", "M"), class = "factor")), class = "data.frame", row.names = c(NA,
-9L))