Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用for循环创建列_R_For Loop_Data.table - Fatal编程技术网

使用for循环创建列

使用for循环创建列,r,for-loop,data.table,R,For Loop,Data.table,我在数据表中有一列,我想重复17年。我想将这组相同的值放入一列并命名 更准确地说,我的数据如下,它被称为“平均值” 我想要的是创建一个新的数据表,其中有一列名为“interval”,它从我的代码段中获取值。然后我只想创建一个基于年份的列 我一直在做的是: Years <- c(1999:2016) for (i in Years){ mean_EXP <- mean_exp_TOD[, list(Interval = c(0:47), i = mean_exp_TOD

我在数据表中有一列,我想重复17年。我想将这组相同的值放入一列并命名

更准确地说,我的数据如下,它被称为“平均值”

我想要的是创建一个新的数据表,其中有一列名为“interval”,它从我的代码段中获取值。然后我只想创建一个基于年份的列

我一直在做的是:

Years <- c(1999:2016)


 for (i in Years){
     mean_EXP <- mean_exp_TOD[, list(Interval = c(0:47), i = mean_exp_TOD[,mean_Exports])]
 }
也没有错误或警告

因此,我们没有得到17个名为“1999”、“2000”、“2001”的栏目。。。。充满了mean_导出数据,我只得到一个名为I

有什么帮助吗?

我们可以这样做(如果我们不需要为循环使用

mean_EXP <- data.table(Interval = 1:47)
for(i in Years) {
    mean_EXP[,as.character(i) := mean_exp_TOD[,mean_Exports]]
}
我们可以这样做(如果我们不需要为
循环使用


问题在于,当对名称
i
求值时,R使用lazy eval,如果要以编程方式命名,则需要使用eval(i):=STUFF。然而,在您当前的代码中,您无论如何都要继续覆盖,因为每次计算名称
i
时,您都要总结mean\u exp\u TOD,R使用lazy eval,如果您希望以编程方式命名,则需要使用eval(i):=STUFF。但是,在你当前的代码中,你还是要继续覆盖,因为每次我刚修复的时候,你都要总结mean_exp_TOD,我意识到他的向量对于第二个向量是数值的,但是对于第一个向量没有修复我刚修复的,我意识到他的向量对于第二个向量是数值的,但是对于第一个向量没有修复
  Interval            i
 1:        0 0.000000e+00
 2:        1 0.000000e+00
 3:        2 0.000000e+00
 4:        3 0.000000e+00
 5:        4 0.000000e+00
 6:        5 0.000000e+00
 7:        6 0.000000e+00
 8:        7 0.000000e+00
 9:        8 3.278689e-05
mean_EXP <- data.table(Interval = 1:47)
for(i in Years) {
    mean_EXP[,as.character(i) := mean_exp_TOD[,mean_Exports]]
}
mean_EXP[,as.character(Years) := replicate(length(Years),
                                          mean_exp_TOD[,mean_Exports],
                                          simplify = FALSE)]
mean_exp_TOD[, paste0(Years) := mean_Exports]
tail(mean_exp_TOD)
#   TheInterval mean_Exports      1999      2000      2001      2002      2003      2004      2005      2006      2007      2008      2009      2010      2011
#1:          28    45.972570 45.972570 45.972570 45.972570 45.972570 45.972570 45.972570 45.972570 45.972570 45.972570 45.972570 45.972570 45.972570 45.972570
#2:          29    35.377330 35.377330 35.377330 35.377330 35.377330 35.377330 35.377330 35.377330 35.377330 35.377330 35.377330 35.377330 35.377330 35.377330
#3:          30    23.981880 23.981880 23.981880 23.981880 23.981880 23.981880 23.981880 23.981880 23.981880 23.981880 23.981880 23.981880 23.981880 23.981880
#4:          31    12.626360 12.626360 12.626360 12.626360 12.626360 12.626360 12.626360 12.626360 12.626360 12.626360 12.626360 12.626360 12.626360 12.626360
#5:          32     4.892807  4.892807  4.892807  4.892807  4.892807  4.892807  4.892807  4.892807  4.892807  4.892807  4.892807  4.892807  4.892807  4.892807
#6:          33     1.284960  1.284960  1.284960  1.284960  1.284960  1.284960  1.284960  1.284960  1.284960  1.284960  1.284960  1.284960  1.284960  1.284960
#        2012      2013      2014      2015      2016
#1: 45.972570 45.972570 45.972570 45.972570 45.972570
#2: 35.377330 35.377330 35.377330 35.377330 35.377330
#3: 23.981880 23.981880 23.981880 23.981880 23.981880
#4: 12.626360 12.626360 12.626360 12.626360 12.626360
#5:  4.892807  4.892807  4.892807  4.892807  4.892807
#6:  1.284960  1.284960  1.284960  1.284960  1.284960