在R中的for循环中使用开关时出错

时间:2019-07-17 14:08:54

标签: r loops dataframe

基本上,我想做的是还使用开关在数据帧中返回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):   新列将在现有列“

感谢您的帮助,谢谢

1 个答案:

答案 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” 。但是,当scenario10时该怎么办。您的代码“向scenario1添加1”,"0"对应于1,“ 3”对应于4,依此类推。我假设您的代码正确,文本为在这方面是错误的。