R,按日期

时间:2018-05-01 14:45:18

标签: r join

我的代码在这里: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 []都有自己的日期,值对。所以我需要保存每个值,但日期是加入变量。

请注意,这与功能问题一样,都是一个逻辑问题。

1 个答案:

答案 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行。

我能想到一次完成所有步骤的唯一原因是,如果数据太大而无法将其全部放入内存中。