1

data.frame "df"

   st1 st2 st3 st4 st5
1  0   0   0   0   0
2  0   0   0   0   0
3  0   0   0   0   0
4  0   0   0   0   0
5  0   0   0   0   0
6  0   0   0   0   0

ベクトルに基づいて更新されます。ベクトルは何らかの関数呼び出しから返され、毎回、さまざまな数の列が含まれる場合がありますが、ベクトル列は常にdata.frame"df"に存在します。

for (i in 1:10)
{
  x<-funcall()
  print(x)
  #           time.chosen
  #st3        2
  #st5        4
  // Update data.frame "df"
}

Rでこの種の更新を行う簡単な方法はありますか?

更新:forループの最初の反復で、xが

           time.chosen
st3        2
st5        4

その場合、data.framedfは次のようになります。

  st1 st2 st3 st4 st5
1  0   0   2   0   4
2  0   0   0   0   0
3  0   0   0   0   0
4  0   0   0   0   0
5  0   0   0   0   0
6  0   0   0   0   0

ループの各反復は、data.framedfの行に対応します。

4

1 に答える 1

1

このような何かが機能するはずです:

      df[iter,rownames(vector)] <- vector$time.chosen

ここでは、vectorは次のようなdata.frameであると想定しています。

ここに例があります:

vector = data.frame(time.chosen= c(1,2))
rownames(vector) <- paste('t',c(2,3),sep='')
  time.chosen
t2           1
t3           2

df <- as.data.frame(diag(5)*0)
colnames(df) <- paste('t',c(1:5),sep='')


iter <- 1
df[iter,rownames(vector)] <- vector$time.chosen

t1 t2 t3 t4 t5
1  0  1  2  0  0
2  0  0  0  0  0
3  0  0  0  0  0
4  0  0  0  0  0
5  0  0  0  0  0

 iter <-4
 df[iter,rownames(vector)] <- vector$time.chosen

 t1 t2 t3 t4 t5
1  0  1  2  0  0
2  0  0  0  0  0
3  0  0  0  0  0
4  0  1  2  0  0
5  0  0  0  0  0
于 2013-02-24T06:03:20.780 に答える