【发布时间】:2012-01-31 06:14:42
【问题描述】:
我希望能够将差异和百分比变化添加到数据框中的每一列。
我能够将数据融合并执行计算,但我不知道如何将其重新组合或重新组合在一起。我也暗中怀疑这很容易用 plyr 完成,但是 diff() 返回的 n-1 行给我带来了问题。
使用包含的数据集:
library(plyr)
library(quantmod)
head(longley)
GNP.deflator GNP Unemployed Armed.Forces Population Year Employed
1947 83.0 234.289 235.6 159.0 107.608 1947 60.323
1948 88.5 259.426 232.5 145.6 108.632 1948 61.122
1949 88.2 258.054 368.2 161.6 109.773 1949 60.171
1950 89.5 284.599 335.1 165.0 110.929 1950 61.187
1951 96.2 328.975 209.9 309.9 112.075 1951 63.221
1952 98.1 346.999 193.2 359.4 113.270 1952 63.639
longley.m <- melt(longley, id="Year")
longley.m <- ddply(longley.m, .(variable), transform, valdiff=diff(c(NA, value)), valdelt=Delt(value))
head(longley.m)
Year variable value valdiff Delt.1.arithmetic
1 1947 GNP.deflator 83.0 NA NA
2 1948 GNP.deflator 88.5 5.5 0.066265060
3 1949 GNP.deflator 88.2 -0.3 -0.003389831
4 1950 GNP.deflator 89.5 1.3 0.014739229
5 1951 GNP.deflator 96.2 6.7 0.074860335
6 1952 GNP.deflator 98.1 1.9 0.019750520
(我不知道为什么 Delt 将其设为自己的列名,但我已经放弃了)
现在,我可以cast(longley.m, Year ~ variable) 回到原始数据集,但我希望能够在不同列中为每个变量获得差异和百分比变化,而无需对每个变量手动执行计算然后绑定它重新走到一起。我很有信心我已经尝试了各种演员阵容,但都无济于事......
更新: Joran 解决了 Delt 列命名问题:用 as.vector 强制它!
【问题讨论】:
-
有吗?我的问题更多是关于对每一列执行相同的操作并将其放回数据框中。我在那里没有看到解决方案。
-
我想我不明白困难的根源。我知道我可以做些什么来取消投票。