【发布时间】:2013-11-23 21:20:17
【问题描述】:
我正在尝试获取数据框的一些片段并重新调整它们,以便它们适合使用 xts 或 zoo 之类的包进行时间序列分析。为此(据我所知),我只需要一个时间序列矩阵,其中包含相关变量的值,以广泛的形式设置。
看来reshape2 包中的melt 和cast 将是执行此操作的方法,我正在使用此处找到的相同方法:https://stats.stackexchange.com/questions/7439/how-to-change-data-between-wide-and-long-formats-in-r ...但我遇到了麻烦.
假设这是数据集:
df <- structure(list(Date = structure(c(15461, 15462, 15463, 15461,
15462, 15461, 15462, 15463, 15461, 15462, 15461, 15462, 15461,
15462, 15463), class = "Date"), Company = structure(c(2L, 2L,
2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L), .Label = c("Fakeco",
"Globcorp", "Renco"), class = "factor"), Region = structure(c(2L,
2L, 2L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 3L, 3L, 2L, 2L, 2L), .Label = c("amer",
"asia", "euro"), class = "factor"), Revenue = c(141L, 467L, 168L,
359L, 220L, 124L, 303L, 196L, 264L, 461L, 149L, 472L, 287L, 308L,
333L)), .Names = c("Date", "Company", "Region", "Revenue"), row.names = c(NA,
-15L), class = "data.frame")
最终,我希望使用唯一的日期条目组织数据,每列 一家区域公司,并将收入作为值。
我的第一个猜测是做类似的事情
1) 创建一个变量,它是 Company 和 Region 的组合,以便每个组合 可以是一列:
df$coreg <- do.call(paste, c(df[c("Company", "Region")], sep= "_"))
2) 使用plyr 围绕这个新变量重新组织
dfply <- ddply(df, c("Date","coreg"),
function(df) c(Revenue = sum(df[,4])))
3) 使用reshape2 中的melt 和cast 函数重新组织时间序列的数据
分析。
one <- melt(dfply, id=c("Date","coreg"))
two <- dcast(one, Date ~ coreg)
但是有没有更直接的方法可以做到这一点?这似乎是一个非常迂回的方式
进行了几次切换和数据聚合,我觉得我没有正确利用 melt 和 cast...
【问题讨论】: