介绍
我还不是 R 专家,所以请原谅我可能应该不好意思问的另一个问题。在我在 stackoverflow 上提出的另一个问题中,我得到了一些非常有用的评论,关于如何通过函数将 xts 对象的不规则每日数据聚合为每周值
apply.weekly()
。不幸的是,我没有找到像 , 或这样的函数tapply()
,它ddply()
允许按与该函数一起使用的类别进行拆分。by()
aggregate()
apply.weekly()
我的数据
这是我的示例数据集。我已经在另一个问题中发布了。出于说明目的,我也冒昧地在这里发布它:
example <- as.data.frame(structure(c(" 1", " 2", " 1", " 2", " 1", " 1", " 2", " 1", " 2",
" 1", " 2", " 3", " 1", " 1", " 2", " 2", " 3", " 1", " 2", " 2",
" 1", " 2", " 1", " 1", " 2", NA, " 2", NA, NA, " 1", " 3", " 1",
" 3", " 3", " 2", " 3", " 3", " 3", " 2", " 2", " 2", " 3", " 3",
" 3", " 2", " 2", " 3", " 3", " 3", " 3", " 1", " 2", " 1", " 2",
" 2", " 1", " 2", " 1", " 2", " 2", " 2", " 3", " 1", " 1", " 2",
" 2", " 3", " 3", " 2", " 2", " 1", " 2", " 1", " 1", " 2", NA,
" 2", NA, NA, " 1", " 3", " 2", " 3", " 2", " 0", " 3", " 3",
" 3", " 2", " 0", " 2", " 3", " 3", " 3", " 0", " 2", " 2", " 3",
" 3", " 0", "12", " 5", " 9", "14", " 5", "tra", "tra", "man",
"inf", "agc", "07-2011", "07-2011", "07-2011", "07-2011", "07-2011"
), .indexCLASS = c("POSIXlt", "POSIXt"), .indexTZ = "", class = c("xts",
"zoo"), .indexFORMAT = "%U-%Y", index = structure(c(1297642226,
1297672737, 1297741204, 1297748893, 1297749513), tzone = "", tclass = c("POSIXlt",
"POSIXt")), .Dim = c(5L, 23L), .Dimnames = list(NULL, c("rev_sit",
"prof_sit", "emp_nr_sit", "inv_sit", "ord_home_sit", "ord_abr_sit",
"emp_cost_sit", "usage_cost_sit", "tax_cost_sit", "gov_cost_sit",
"rev_exp", "prof_exp", "emp_nr_exp", "inv_exp", "ord_home_exp",
"ord_abr_exp", "emp_cost_exp", "usage_cost_exp", "tax_cost_exp",
"gov_cost_exp", "land", "nace", "index"))))
列
“rev_sit”、“prof_sit”、“emp_nr_sit”、“inv_sit”、“ord_home_sit”、“ord_abr_sit”、“emp_cost_sit”、“usage_cost_sit”、“tax_cost_sit”、“gov_cost_sit”、“rev_exp”、“prof_exp”、“emp_nr_exp” ", "inv_exp", "ord_home_exp","ord_abr_exp", "emp_cost_exp", "usage_cost_exp","tax_cost_exp","gov_cost_exp",
参考调查中的问题。有“1”、“2”和“3”三个回答可能性代码。
列
“土地”,“纳斯”
是分别具有 16 个和 8 个独特因素的类别。
我的目标 我的目标是针对“nace”和“land”中的类别因素的每个组合,每周计算“1”、“2”和“3”的出现次数。我的想法是预先为每个回答可能性 {1,2,3} 创建二进制向量(example_1,example_2,example_2),然后应用类似的东西:
apply.weekly(example_1, function(d){ddply(d,list(example$nace,example$land),sum)})
但这不适用于ddply
,aggregate
等by
。
我的目标
我最初的非专业工作不是创建时间序列,而是创建一个日期向量example$date
,其中给定时间列编码为每周一次%V
,然后使用,即:
tapply(example_1[,5], list(example$date,example$nace,example$land),sum)
对于上面显示的二十个问题中的每一个,我当然会这样做。然后我得到例如example_1:
第 1 周,nace1.land1,nace1.land2,nace1.land3,...,nace1.land16,nace2.land1,...,nace8.land16 第 2 周,nace1.land1,nace1.land2,nace1.land3,..., nace1.land16, nace2.land1,..,nace8.land16 ... ...weekn, nace1.land1, nace1.land2, nace1.land3, ..., nace1.land16, nace2.land1,..,nace8 .land16
我必须对 2 (example_2) 和 3 (example_3) 做同样的事情,这对于 20 个问题中的每一个问题都会产生所有 16*8*3*20=7680 列。这种极端情况,另外使用这种方法,产品不是时间序列,因此不能按周正确排序。
概括
所以任何人都可以教我或给我一个提示,如何将函数与函数、、、、等函数apply.weekly()
结合使用tapply()
,或任何其他方法来实现如上所述的分组。每一个提示都非常感谢。我已经很沮丧地考虑放弃我的 R 实验并改回 stata,其中很多东西都更加直观,等等......但不要理解我的错误:我很想学习所以请帮助我!ddply()
by()
split()
unstack()
collapse()
by()