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 循环的结果。('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 列或一个列表的矩阵/数据框。

有任何想法吗?


嘿!

因此,我不允许编辑自己的答案,这里我的(简单)解决方案如下:

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'

谢谢大家!

乔治

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 回答