【问题标题】:For loop in R assigning to a data frameR中的for循环分配给数据框
【发布时间】:2014-02-13 09:32:06
【问题描述】:

在运行 for 循环后,我无法分配给数据帧。当我使用 print 时,它给出了我的价值,有什么解释吗?

 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 数量。谢谢你们的指导,伙计们。

【问题讨论】:

  • 您能解释一下您要完成的工作吗?通常有比使用for 循环更简单的替代方法。
  • 请同时提出您的问题reproducible,即提供一些虚拟数据 - 这样可以更轻松地为您提供帮助。干杯。

标签: r for-loop


【解决方案1】:

您正在将矢量化处理与索引混合。在第一个示例中,您将 (length.....) 中的一个数字分配给测试的所有元素,并覆盖每个循环中的数字。只打印最后一个作业。

类似:

test = rep(NA,length(new))

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

会起作用。正如 Paul 提到的,代码不是很 R-ish,但由于您没有提供 msales,我无法给您提供更好的示例。

【讨论】:

    猜你喜欢
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 2019-06-13
    • 1970-01-01
    相关资源
    最近更新 更多