我的问题只是我编码的功能的一部分。
我已经获得了data.frames列表(每个都有自己的数字和日期列),这些列表包含每周数据或每月数据。我已经将2个空对象定义为"每周"和"每月"我写的for循环通过它来找出每周或每月的元素。然后,循环将每个元素分类为每周/每月,并将它们转换为xts对象。
library(xts)
weekly = NULL
monthly = NULL
for (i in 1:length(terms.list)) {
diff.days <- difftime(as.Date(terms.list[[i]][2,1]), as.Date(terms.list[[i]][1,1]))
if (diff.days < 10) {
freq <- 52
weekly = cbind(weekly, xts(terms.list[[i]][,2], order.by=terms.list[[i]][[1]], frequency=freq))
} else {
freq <- 12
monthly = cbind(monthly, xts(terms.list[[i]][,2], order.by=terms.list[[i]][[1]], frequency=freq))
}}
所以我最终得到两个xts对象,即每周和每月。 我现在想要的是在for循环中包含一行代码,该代码行挑选每周定义的术语(和每月定义的术语)的名称,并将它们分别设置为每种类型的xts对象的dimnames。
类似的东西:
dimnames(weekly)[[2]] <- names(terms.list[i])
dimnames(monthly)[[2]] <- names(terms.list[i])
请注意,我希望它在for循环中。我已经尝试了,但它一直给我以下错误:
Error in `colnames<-`(`*tmp*`, value = "jobs") :
length of 'dimnames' [2] not equal to array extent
&#34;作业&#34;是data.frame元素名称之一。
非常感谢任何帮助。
答案 0 :(得分:0)
我无法测试这个,因为你没有提供reproducible example,但我认为它应该可行。基本上,您需要构造一个dimname
列表并在xts构造函数中设置它。
library(xts)
weekly <- NULL
monthly <- NULL
for (i in seq_along(terms.list)) {
term <- terms.list[[i]]
dimNames <- list(NULL, names(terms.list)[i])
diff.days <- difftime(as.Date(term[2,1]), as.Date(term[1,1]))
if (diff.days < 10) {
freq <- 52
weekly <- cbind(weekly, xts(term[,2], term[,1], freq, dimnames=dimNames))
} else {
freq <- 12
monthly <- cbind(monthly, xts(term[,2], term[,1], freq, dimnames=dimNames))
}
}