Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.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
R 如何根据第三个变量的形式乘以分析?_R_Automation_Aggregate - Fatal编程技术网

R 如何根据第三个变量的形式乘以分析?

R 如何根据第三个变量的形式乘以分析?,r,automation,aggregate,R,Automation,Aggregate,我正在处理一个大型数据库,在这个数据库中,我想根据第三个(也是第四个)变量的模式生成链表(x),并汇总结果。我有点阻塞,我不知道怎么做 以下是我的数据帧(数据)的结构: 每一行都是独立的。他有一个年龄,他是死是活,他有一个职业(这是一篇专栏文章,其中包含一个职业代码:“02”是科学的,“88”是冶金工人,“A0”是军人等等)和一个性别(男/女) 我只是想创建死亡率表。这很容易: table(data$age, data$dead) 以下是完整数据库的结果,例如: age dead=0 d

我正在处理一个大型数据库,在这个数据库中,我想根据第三个(也是第四个)变量的模式生成链表(x),并汇总结果。我有点阻塞,我不知道怎么做

以下是我的数据帧(数据)的结构:

每一行都是独立的。他有一个年龄,他是死是活,他有一个职业(这是一篇专栏文章,其中包含一个职业代码:“02”是科学的,“88”是冶金工人,“A0”是军人等等)和一个性别(男/女)

我只是想创建死亡率表。这很容易:

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))