我的代码在这里:https://github.com/thistleknot/FredAPIR/blob/master/SemanticFilter.R
我遍历parsedList
a=1
for (i in parsedList)
{
test1 <- fred$series.observations(series_id = parsedList[a], observation_start = "2000-01-01", observation_end = "2018-03-01")
test2 <- fred$series.observations(series_id = parsedList[a+1], observation_start = "2000-01-01", observation_end = "2018-03-01")
test %>>%
select(
date,
value
) %>>%
mutate(
date = as.Date(date),
value = as.numeric(value)
) ->
dt1
if (a>length(parsedList))
{
test2 %>>%
select(
date,
value
) %>>%
mutate(
date = as.Date(date),
value = as.numeric(value)
) ->
dt2
dt2[dt1, on = c('date')]
}
a=a+1
}
我想要做的是按日期合并(加入?)所有这些parsedList,以便所有数据集(当前由“date”和“value”组成)按日期合并。
我想使用merge函数(来自data.table?),但想迭代遍历所有parsedList并导致一个数据集只有日期和一大堆值(来自每个parsedList数据集)。
注意[a] =计数器变量。这是一个棘手的部分。如何将解析列表[a]的各个列表的所有迭代测试加入到单个列表中? Ex ... parsedList [1]&amp; parsedList [2]&amp; parsedList [3]和......依此类推,直到处理了parsedList [length(parsedList)]的最后一个元素。所以每个parsedList []都有自己的日期,值对。所以我需要保存每个值,但日期是加入变量。
请注意,这与功能问题一样,都是一个逻辑问题。
答案 0 :(得分:1)
这是我的建议。我仍然不知道fred
是什么或来自哪里,也不知道parsedList
,所以我不能做任何测试。但希望它可以解决这个问题。
# first download all the data
data_list = lapply(parsed_list, function(a)
fred$series.observations(
series_id = a,
observation_start = "2000-01-01",
observation_end = "2018-03-01"
)
)
# define function to process the data
# we plan on re-naming the "value" column so each one is distinct
process_data = function(d, value_name) {
d = d[, c("date", "value")]
d$date = as.Date(d$date)
d$value = as.numeric(d$value)
names(d)[2] = value_name
return(d)
}
# process the data
data_list_processed = list()
for (i in seq_along(data_list)) {
data_list_processed[[i]] = process_data(data_list[[i]], value_name = paste0("value", i))
}
# merge the data
combined_data = Reduce(merge, data_list_processed)
将代码分解为这样的步骤使其更加模块化,让您有机会分别调试每个步骤。它还可以让您轻松使用其他代码,例如按日期连接所有数据集的Reduce
行。
我能想到一次完成所有步骤的唯一原因是,如果数据太大而无法将其全部放入内存中。