使用for循环创建列
我在数据表中有一列,我想重复17年。我想将这组相同的值放入一列并命名 更准确地说,我的数据如下,它被称为“平均值” 我想要的是创建一个新的数据表,其中有一列名为“interval”,它从我的代码段中获取值。然后我只想创建一个基于年份的列 我一直在做的是:使用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
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