2014-02-13 167 views
0

我在運行for循環後無法分配數據幀。當我使用印刷品時,它給我的價值,對它的任何解釋?For循環R分配給數據幀

salesdate<-rep(seq(from=as.Date("2013-12-19"),to=as.Date("2013-12-23"),by=1),100) 
memberid<-as.factor(sample(1:1000,500)) 
msales<-data.frame(salesdate,memberid) 

new<-seq(from=as.Date("2013-12-19"),to=as.Date("2013-12-23"),by=1) 
for(i in new) 
+ print(length(unique(msales[(msales$salesdate>="2013-12-23" | msales$salesdate>=i),]$memberid))) 
[1] 500 
[1] 400 
[1] 300 
[1] 200 
[1] 100 

test <- rep(NA,length(new)) 
new<-seq(from=as.Date("2013-12-19"),to=as.Date("2013-12-23"),by=1) 
for(i in new) 
+ test[1:5]<-length(unique(msales[(msales$salesdate>="2013-12-23" | msales$salesdate>=i),]$memberid)) 
> test 
[1] 100 100 100 100 100 

我創建了一些示例。我的目標是計算當前日期的每個日期期間唯一ID的數量。謝謝你的指導,夥計們。

+0

你能解釋一下你試圖完成什麼嗎?通常比使用for循環更簡單。 –

+1

請同時提出您的問題[** reproducible **](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610#5963610),即提供一些虛擬數據 - 這使得它更容易幫助你。乾杯。 – Henrik

回答

1

您正在將矢量化處理與索引混合。在第一個示例中,將(長度.....)中的一個數字分配給所有測試元素,並覆蓋每個循環的數字。只打印最後一個作業。

類似:

test = rep(NA,length(new)) 

for (i in new) 
    test[i] = your number 

會工作。正如保羅所說,代碼不是很R-ish,但由於你沒有提供msales,所以我不能給你一個更好的例子。