在R中创建滞后的新变量时如何遍历列名?

问题描述

我有一些流行病学数据,其索引是城市和日期。我想将某些列滞后几天,因为我打算在以后的回归中使用这些变量。根据我从R文档中读到的内容,最适合此功能的是shift()包中的data.table。所以这是我第一次尝试:

for (i in colnames(epidemiological_data)[5:8]) {
  setkey(epidemiological_data,city.code,date)
  epidemiological_data[,paste0("lagged.",i) := shift(i,10,"lag"),by = city.code]
}

我得到了期望的结果,即创建了四个带有“滞后”的新列。字首。问题在于这些值完全由0组成。我对这种情况的发生有一个预感:i被解释为字符串,而不是我要引用的数据表中的列。因此,当将字符串“滞后”到先前的值时,程序无法找到任何内容,因此从fill = 0函数输入shift()自变量。为了解决这个问题,我尝试改用以下语法:

for (i in colnames(epidemiological_data)[5:8]) {
      setkey(epidemiological_data,date)
      epidemiological_data[,i) := shift(epidemiological_data[,i],by = city.code]
    }

然后,出现以下错误

[。data.table(epidemiologic_data,,i)中的错误:j(第二个 [...]内的参数是单个符号,但列名“ i”不是 找到了。也许您打算使用DT [,..i]。与data.frame的区别 是常见问题,并在FAQ 1.1中进行了解释。

此外,我还尝试了最后一种选择:

for (i in colnames(epidemiological_data)[5:8]) {
          setkey(epidemiological_data,date)
          epidemiological_data[,i) := shift(epidemiological_data[[i]],by = city.code]
        }

下面给出了哪个消息:

[。data.table(epidemiological_data,,:=(paste0(“ lagged。”,: 在列中提供了21528个项目,将其分配给大小为207的组1 'lagged.active.cases'。 RHS长度必须为1(单个值 可以)或完全匹配LHS长度。如果您想“回收” RHS请明确使用rep()来使读者明白这一意图 您的代码

有人对如何解决这个问题有任何想法吗?我知道我可以手动生成四个新变量,但是对于我来说,解决方案似乎并不那么优雅。预先感谢!

P.S。我是Stack Overflow的新手,所以我不知道如何从问题中的数据中输入样本。关于此事的任何提示也可能会有所帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)