0

我有代码(如下),它根据上一季度的数据在一个季度应用线性模型来估计缺失的数据,这是可行的。

data <- data %>%
  nest_legacy(-groupvar1, -groupvar2) %>%
  mutate(modelvar1 = map(data, ~lm(var1 ~ quarter_date, data = .)),
         modelvar2 = map(data, ~lm(var2 ~ quarter_date, data = .)),
         var1_pred = map2(modelvar1, data, predict),
         var2_pred = map2(modelvar2, data, predict)) %>%
  select(-modelvar1, -modelvar2) %>%
  unnest_legacy()

我想通过使用新的嵌套代码来证明它。我遵循了帮助页面上的指南,并提出了以下内容:

data = data %>%
    nest(data = c(groupvar1, groupvar2)) %>%
    mutate(modelvar1 = map(data, ~lm(var1 ~ quarter_date, data = .)),
           modelvar2 = map(data, ~lm(var2 ~ quarter_date, data = .)),
           var1_pred = map2(modelvar1, data, predict),
           var2_pred = map2(modelvar2, data, predict)) %>%
    select(-modelvar1, -modelvar2) %>%
    unnest(data, cols = c(var1, var2))

但是,我一直收到一个错误

错误:列c(aasb, tobd)的长度必须为 701(行数)或 1,而不是 1402

显然我做错了什么,但我不知道它是什么。谁能提供一些见解?谢谢!

编辑:希望这是一个可能有帮助的例子。

quarter_date = as.Date(c("2014-01-01", "2014-04-01", "2014-01-01", "2014-07-01", "2014-04-01"))
groupvar1 = c("spec1", "spec2", "spec1", "spec3", "spec3")
groupvar2 = c("loc1", "loc2", "loc3", "loc2", "loc3")
var1 = c(0, 656, 268, 78, 92)
var2 = c(87789, 45678, 23367, 76573, 68786)
test = tibble(groupvar1, groupvar2, var1, var2, quarter_date)
4

1 回答 1

0

我编辑了您的示例数据,以便原始线性模型代码可以通过格式化日期并将 Quarter_date 列添加到最后的小标题来工作

quarter_date = as.Date(c("2014-01-01", "2014-04-01", "2014-01-01", "2014-07-01", "2014-04-01"))
groupvar1 = c("spec1", "spec2", "spec1", "spec3", "spec3")
groupvar2 = c("loc1", "loc2", "loc3", "loc2", "loc3")
var1 = c(0, 656, 268, 78, 92)
var2 = c(87789, 45678, 23367, 76573, 68786)
data = tibble(groupvar1, groupvar2, var1, var2, quarter_date)

要获得与新的相同的输出,nest您需要在分组变量之前加上减号,就像您在原始变量中所做的那样,并且不需要 cols 参数来取消嵌套

data = data %>%
    nest(data = c(-groupvar1, -groupvar2)) %>%
    mutate(modelvar1 = map(data, ~lm(var1 ~ quarter_date, data = .)),
           modelvar2 = map(data, ~lm(var2 ~ quarter_date, data = .)),
           var1_pred = map2(modelvar1, data, predict),
           var2_pred = map2(modelvar2, data, predict)) %>%
    select(-modelvar1, -modelvar2) %>%
    unnest(data)
于 2020-01-10T17:37:10.463 回答