通过循环使用列表中某些元素的名称设置 xts 对象的 dimnames
set dimnames of an xts object with the names of certain elements in a list through loop
我的问题只是我正在编写的函数的一部分。
我有一个 data.frames 的列表(每个都有自己的数字和日期列),其中包含每周数据或每月数据。我已经将 2 个空对象定义为 "weekly" 和 "monthly",我编写的 for 循环通过它们来找出哪个元素是每周或每月。然后,循环将每个元素分类为 weekly/monthly 并将它们转换为 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循环中包含一行代码,它挑选出每周定义的术语(和每月定义的术语)的colnames并将它们分别设置为每种类型的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
"jobs" 是 data.frame 元素名称之一。
如有任何帮助,我们将不胜感激。
我无法对此进行测试,因为您没有提供 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))
}
}
我的问题只是我正在编写的函数的一部分。
我有一个 data.frames 的列表(每个都有自己的数字和日期列),其中包含每周数据或每月数据。我已经将 2 个空对象定义为 "weekly" 和 "monthly",我编写的 for 循环通过它们来找出哪个元素是每周或每月。然后,循环将每个元素分类为 weekly/monthly 并将它们转换为 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循环中包含一行代码,它挑选出每周定义的术语(和每月定义的术语)的colnames并将它们分别设置为每种类型的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
"jobs" 是 data.frame 元素名称之一。
如有任何帮助,我们将不胜感激。
我无法对此进行测试,因为您没有提供 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))
}
}