我遇到了以下问题:
我在R中使用for-loop从矩阵中获取特定数据。 我的代码如下。
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'的每一行)
但不幸的是我做不到。
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'
向大家致谢!
乔治
答案 0 :(得分: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)
答案 1 :(得分: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)
}