2013-03-19 126 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