2014-02-14 63 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

請不要轉貼;這已被問及昨天回答:http://stackoverflow.com/questions/21750123/for-loop-in-r-assigning-to-a-data-frame/21750630#21750630 –

回答

2

我不是100%確定你想要做什麼,但我主要的問題是你在每次循環迭代時分配給[1:5],這意味着最終你會得到最終值(100 )分配給所有五個,因爲在最後一次迭代中(以及每隔一個),您將分配給所有五個點([1:5])。以下是替代方案:

test <- rep(NA,length(new)) 
for(i in seq_along(new)) 
    test[i]<-length(
    unique(
     msales[(msales$salesdate>="2013-12-23" | msales$salesdate>=new[[i]]),]$memberid 
)) 
test 

關鍵部分是test[i] <- ...。這將產生:

# [1] 500 400 300 200 100` 

還要注意如何在狀態,我們需要使用msales$salesdate >= new[[i]]