3

私は次の問題を抱えています:

R 内で for ループを使用して、行列から特定のデータを取得します。私のコードは次のとおりです。

for(i in 1:100){
   T <- as.Date(as.mondate (STARTLISTING)+i)
   DELIST <- (subset(datensatz_Start_End.frame, TIME <= T))[,1]

   write.table(DELIST, file = paste("tab", i, ".csv"), sep="," )
   print(DELIST)
}

を使用してprint、R はデータを配信します。を使用してwrite.table、R はデータをさまざまなファイルに配信します。

私の目的は、for ループからの結果を1 つのマトリックス内に集約することです。(「i」の各行)

しかし、残念ながら私はそれを作ることができません。


申し訳ありませんが、私は R の初心者です。

for(i in 1:100)
{
T <- as.Date(as.mondate (STARTLISTING)+i)
DELIST <- (subset(datensatz_Start_End.frame, TIME <= T))[,1]
assign(paste('b',i,sep=''),DELIST)

}

これにより、私の結果を含む 100 個のオブジェクトが配信されます。しかし、私が必要としているのは、100 列または1 つのリストを持つ1 つの マトリックス/データフレームです。

何か案は?


おい!

したがって、私は自分の回答を編集することはできません。ここで私の(単純な)解決策は次のとおりです。

DELIST <- vector("list",100)
for(i in 1:100)

{
T <- as.Date(as.mondate (STARTLISTING)+i)
DELIST[[i]] <- as.character((subset(datensatz_Start_End.frame, TIME <= T))[,1])
}

DELIST[[99]]  ## it is possible to requist the relevant companies for every 'i'

みんなにThx!

ジョージ

4

2 に答える 2

2

リストが必要な場合はlapply、ループの代わりに使用できます

LL <- lapply(1:100, 
       function(i) {
         T <- as.Date(as.mondate (STARTLISTING)+i)
         DELIST <- (subset(datensatz_Start_End.frame, TIME <= T))[,1]
         assign(paste('b',i,sep=''),DELIST) 
         }
       )

その後、rbind一緒に結果を得ることができますdo.call

result <- do.call(rbind, LL)

または、LL のすべての要素の列が同じになると確信している場合はrbindlist、パッケージからより効率的に使用できますdata.table

result <- rbindlist(LL)
于 2013-04-11T03:28:36.787 に答える
0

チェックアウトrbind機能。空から始めてDELIST.DF、ループ内で各行を追加できます-

DELIST.DF <- NULL
for(i in 1:100){
   T <- as.Date(as.mondate (STARTLISTING)+i)
   DELIST <- (subset(datensatz_Start_End.frame, TIME <= T))[,1]

   DELIST.DF <- rbind(DELIST.DF, DELIST)

   write.table(DELIST, file = paste("tab", i, ".csv"), sep="," )
   print(DELIST)
}
于 2013-04-10T14:40:08.123 に答える