2013-03-19 84 views
-1

我正在使用for-loop在我的数据的特定子集上执行操作。在for循环的每次迭代结束时,我拥有填充我的数据框的一行所需的所有值。逐步填充数据框

到目前为止,我试过

df=NULL 
for(...){ 
//stuff to calculate 
newline=c(allthethingscalculated) 
df=rbind(df,newline) 
} 

这会导致无法使用accessable“$”数据框的内容,因为该行是那么原子向量。

我还尝试将每次迭代结束时得到的值追加到已存在的矢量中,并且for循环结束时,使用这些矢量创建数据框但将值附加到各自的矢量上不起作用,这些值没有被添加。

x<-data.frame(a,b,c,d,...) 

对此的任何想法?


因为我超过在我的数据标识循环迭代,我意识到我可以做这样的事情:

uids=unique(data$id) 
filler=c(1:length(uids)) 
df=data.frame(uids,filler,filler,filler,filler,filler,filler,filler,filler,filler) 

for(i in uids){ 
... 
df[i,]<-newline 
} 

我以前填料创建具有正确的列数的数据帧和行,所以我没有得到一个错误,如'替换长度为9,替换长度为1'

有没有更好的方法来做到这一点?使用这种方法,我仍然需要删除相应的行中的值填充

+0

是否每次迭代后'newline'的长度都一样? – 2013-03-19 07:47:12

+0

如果事先知道迭代次数,为什么不用NAs填充data.frame,并用计算来替换每一行?像'df < - as.data.frame(矩阵(NA,i * ncols,ncol = ncols))' – 2013-03-19 07:47:32

+0

也许在开始时你必须说:'df < - data.frame()'。无论如何,没有例子,我觉得这个问题有点不清楚。 – Arun 2013-03-19 07:51:26

回答

0

这应该工作,你可以告诉我们你的数据?

R) x=data.frame(a=rep(1,3),b=rep(2,3),c=rep(3,3)) 
R) d=c(4,4,4) 
R) rbind(x,d) 
    a b c 
1 1 2 3 
2 1 2 3 
3 1 2 3 
4 4 4 4 
R) cbind(x,d) 
    a b c d 
1 1 2 3 4 
2 1 2 3 4 
3 1 2 3 4