我有一个大的data.table
df,由0到1之间的整数值组成,我想改变一些列。这些名称如下所示。我想这10个缩放因子,也是整数,所以我认为循环会更有效。我使用了包data.table
。
Cur_1 Cur_2 Cur_3 Cur_4 Cur_5 Cur_6 Cur_7 Cur_8 Cur_9 Cur_10 Cur_11 Cur_12
0.225 0.227 0.229 0.233 0.225 0.226 0.228 0.229 0.229 0.301 0.302 0.305
0.226 0.227 0.229 0.233 0.225 0.226 0.228 0.229 0.229 0.301 0.302 0.305
if(pd_scaling1!=0){
df$Cur_1=df$Cur_1*(1+scaling1)
df$Cur_2=df$Cur_2*(1+scaling1)
df$Cur_3=df$Cur_3*(1+scaling1)
df$Cur_4=df$Cur_4*(1+scaling1)
df$Cur_5=df$Cur_5*(1+scaling1)
df$Cur_6=df$Cur_6*(1+scaling1)
df$Cur_7=df$Cur_7*(1+scaling1)
df$Cur_8=df$Cur_8*(1+scaling1)
df$Cur_9=df$Cur_9*(1+scaling1)
df$Cur_10=df$Cur_10*(1+scaling1)
df$Cur_11=df$Cur_11*(1+scaling1)
df$Cur_12=df$Cur_12*(1+scaling1)
}
我试过了:
for(i in 1:10){
if(get(paste("scaling",i,sep=""))!=0){
for(j in (i-1)*12+1:i*12){
df[,get(paste("Cur",j,sep="_")):=get(paste("Cur",j,sep="_"))*rep((1+get(paste("scaling",i,sep=""))),h_i)
}
}
但是出现了以下错误:
get中的错误(粘贴(" Cur",j,sep =" _")):object' Cur_2'未找到 }
答案 0 :(得分:0)
这是我首先想到的(也许不是最佳解决方案)将比例值应用于给定条件的data.table
中的列。
首先,我根据您的数据创建了data.table
:
library(data.table)
names <- sapply(1:12,function(x) paste0("Cur_",x))
d1 <- c(0.225, 0.227, 0.229, 0.233, 0.225, 0.226, 0.228, 0.229, 0.229, 0.301, 0.302, 0.305)
d2 <- c(0.226, 0.227, 0.229, 0.233, 0.225, 0.226, 0.228, 0.229, 0.229, 0.301, 0.302, 0.305)
D <- sapply(1:12, function(x) list(d1[x], d2[x]))
DD <- data.table(D)
colnames(DD) <- names
head(DD)
data.table
看起来像这样:
Cur_1 Cur_2 Cur_3 Cur_4 Cur_5 Cur_6 Cur_7 Cur_8 Cur_9 Cur_10 Cur_11 Cur_12
1: 0.225 0.227 0.229 0.233 0.225 0.226 0.228 0.229 0.229 0.301 0.302 0.305
2: 0.226 0.227 0.229 0.233 0.225 0.226 0.228 0.229 0.229 0.301 0.302 0.305
我想您正在尝试将比例值应用于所有列,因此我创建了一个缩放变量,其中data.table
的列长度与随机数相同。
scaling <- rep(100,length(names))
我看到你正在尝试验证比例值是否与0不同,所以我故意将其中一个比例值设为0,只是为了显示我所做解决方案的行为。
scaling[2] <- 0
现在我们创建一个循环来验证缩放的值,并将缩放应用于data.table
for (i in 1:length(names)) {
if (scaling[i] != 0) {
DD[,names[i] := lapply(.SD, function(x) unlist(x)*scaling[i]), .SDcols = names[i]]
}
}
最终的data.table
如下所示:
head(DD)
Cur_1 Cur_2 Cur_3 Cur_4 Cur_5 Cur_6 Cur_7 Cur_8 Cur_9 Cur_10 Cur_11 Cur_12
1: 22.5 0.227 22.9 23.3 22.5 22.6 22.8 22.9 22.9 30.1 30.2 30.5
2: 22.6 0.227 22.9 23.3 22.5 22.6 22.8 22.9 22.9 30.1 30.2 30.5
一些提示:我强烈建议您阅读 David Arenburg提供的来源,因为我不得不猜测您想要的是什么。 评论中 Roland 的来源非常有用,可以很好地解释您的问题。