运行for循环后,我无法分配数据帧。当我使用打印时,它给出了我的价值,给它任何解释吗?
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 :(得分:2)
我不是百分之百确定你要做什么,但我主要的问题是你在每次循环迭代时分配给[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]]