【问题标题】:R: Doing calculations on multiple factors/levels (Dummy variables)R:在多个因素/水平上进行计算(虚拟变量)
【发布时间】:2013-05-27 12:55:57
【问题描述】:

我有两个等长的时间序列数据匹配向量:价格 (x) 和小时 (h)。小时从 0 到 23。我的小时变量是我的虚拟变量(或者我猜它在 R 中调用的因子/级别变量)。

现在我已经定义了 24 个不同的虚拟变量,并且每隔一小时我都会输入我的虚拟变量。因此,例如生成 24 个图来查看或计算 24 个均值等,我将输入: plot.ts(hour1) # 以此类推 24 个。

我想尽可能轻松地为所有 24 个变量执行此操作吗?所以我可以运行很多不同的计算。例如,我怎么能只计算所有 24 个虚拟变量的平均值而不编写 24 行代码来更改每个虚拟变量?

编辑:对不起,认为这两个向量很清楚。示例:

 1. Price Hour
 2. 8     0
 3. 12    1
 4. 14    2
 5. 16    3
 6. 18    4
 7. 20    5
 8. 22    6
 9. 24    7
 10. 26   8
 11. 28   9
 12. 24   10
 13. 26   11
 14. 23   12
 15. 23   13
 16. 23   14
 17. 14   15
 18. 19   16
 19. 25   17
 20. 26   18
 21. 28   19
 22. 30   20
 23. 33   21 
 24. 24   22
 25. 10   23
 26. 14   0
 27. 12   1
 28. 13   2
 29. x    ect.

【问题讨论】:

  • 即使您对单词非常清楚,也需要可重复的示例。通过使用我们拥有的工具并“修补”您拥有的数据,通常可以找到解决方案。在您仔细检查之前,通常数据的结构可能看起来很清晰。

标签: r r-factor


【解决方案1】:

由于您没有给出可重现的示例,因此不清楚您的数据是如何存储的。我假设您每个小时都有单独的变量1。

一般来说,最好将hourxx 变量放在一个列表中以执行计算。

例如,这将计算所有小时的平均值:

    lapply(lapply(ls(pattern='hour.*'),get),mean)

编辑在 OP 澄清后:

您应该创建一个新变量来区分小时间隔。类似的东西:

dat <- data.frame(Price=rnorm(24*5),Hour=rep(0:23,5))
dat$id <- cumsum(c(0,diff(dat$Hour)==-23))

然后以ply 包为例,您可以通过 id 计算均值:

library(plyr)
ddply(dat,.(id),summarise,mPrice=mean(Price))

 id     mPrice
1  0  0.2999602
2  1 -0.2201148
3  2  0.2400192
4  3 -0.2087594
5  4  0.1666915

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-05
    • 2016-03-07
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 2021-03-31
    相关资源
    最近更新 更多