介紹R:分組/按類別組合拆分數據集apply.weekly()
我不是的R專家又那麼請原諒我大概應該是尷尬的問了另一個問題。在another question我對stackoverflow問了一些關於如何通過 apply.weekly()
函數將xts對象的非規則日常數據聚合到每週值的一些非常有用的意見。不幸的是,我沒有找到像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」。
列
「地」, 「NACE」
是類別與分別爲16分8個唯一的因素。
我的目標 我的目標是通過周在「NACE」和「地」的類別因素的每一種組合計數的「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)
我當然不會對上述顯示的20個問題中的每一個都做。我然後得到ie例如:
week1,nace1.land1,nace1.land2,nace1.land3,...,nace1.land16,nace2.land1,..,nace8.land16 week2,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()
,ddply()
,by()
,split()
,unstack()
等,或任何其它方法實現如上所述的分組。每一個提示真的很感激。我非常沮喪,已經想着放棄我的R實驗,並改變回stata,在那裏有很多東西比collapse()
和by()
等更直觀。但是不明白我的錯誤:我熱衷於學習,所以請幫助我!
我不能相信你在相同的句子中使用「Stata」和「直覺」(沒有否定)...... – 2012-01-27 20:11:40
@DWin:我認爲這取決於你想做什麼。但是在stata中,你有一個by()函數,它只給出總和b一個特定的索引而不直接崩潰。因此對於一週內的所有日期,您具有相同的價值。 – chameau13 2012-01-27 20:35:30
錯誤消失與'require(xts)'。 – 2012-01-27 20:36:01