2014-02-14 158 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]]