基本上,我想做的是还使用开关在数据帧中返回for循环的结果。
基本上,我有一个名为echelle_dommage的表
看起来像
1 0
2 120000
3 225000
...
10 225000
我有一个向量,该样本是我通过样本获得的
1 6 1 0 0 1 1 4 3 .....
基本上要针对场景1(示例)中的每个值,从数据帧中的echelle_dommage返回匹配的值
例如, 方案1的第一个值为1, 所以我数据框中的第一个值为0 下一个值为6 所以我数据框中的第二个值是225000
echelle_dommage=data.frame(c(0,120000,rep(225000,times=8)))
scenario1=sample(0:9,25,replace=TRUE,prob=prob)
tableau_resume=as.data.frame(matrix(0,ncol=25,nrow=1))
for (i in (1:25)){
indice=scenario1[i]
tableau_resume[,i]=switch(indice,"0"=echelle_dommage[1,1],"1"=echelle_dommage[1,2],"2"=echelle_dommage[1,3],"3"=echelle_dommage[1,4],"4"=echelle_dommage[1,5],"5"=echelle_dommage[1,6],"6"=echelle_dommage[1,7],"7"=echelle_dommage[1,8],"8"=echelle_dommage[1,9],"9"=echelle_dommage[1,10])
}
使用我的代码,我总是收到错误“ [<-.data.frame
(*tmp*
中的错误,i,值= 0):
新列将在现有列“
感谢您的帮助,谢谢
答案 0 :(得分:0)
不需要循环或switch
。这是向量化的解决方案:
## sample data courtesy of @schwantke
set.seed(47)
echelle_dommage=data.frame(c(0,120000,rep(225000,times=8))) scenario1=sample(0:9,25,replace=TRUE)
## one-line solution
tableau_resume = as.data.frame(matrix(echelle_dommage[scenario1 + 1, 1], nrow = 1))
tableau_resume
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15
# 1 225000 225000 225000 225000 225000 225000 225000 225000 225000 225000 120000 225000 120000 225000 225000
# V16 V17 V18 V19 V20 V21 V22 V23 V24 V25
# 1 225000 225000 0 0 225000 120000 225000 225000 120000 225000
您的问题有矛盾之处。在您的文本中,您说“ scenario1的第一个值为1,所以我的数据框中的第一个值为0” 。但是,当scenario1
为0
时该怎么办。您的代码“向scenario1
添加1”,"0"
对应于1
,“ 3”对应于4
,依此类推。我假设您的代码正确,文本为在这方面是错误的。