我有一个缺失值的不平衡季度面板数据集。我想A2
从A1
后续季度中减去变量。请注意,我不想得到 A2 的差异,而是从彼此中减去不同的变量。应为每个 uid 分别计算差异。除了像 1999 年第 4 季度和 2000 年第 1 季度这样的变化年份之外,还意味着随后会发生变化。
我真的不确定我是否应该在这里连接我的时间索引,因为像 zoo 这样的包只需要一个索引。但这不是这里的问题。这是一些示例数据:
structure(list(uid = c(1, 1, 1, 2, 2, 3, 3, 3), tndx = c(1999.4,
2000.1, 2000.2, 1999.4, 2000.1, 2000.1, 2000.2, 2000.3), A1 = c(2,
2, 2, 10, 11, 1, 1, 1), A2 = c(3, 3, 3, 14, 14, 2, 100, 2)), .Names = c("uid",
"tndx", "A1", "A2"), row.names = c(NA, -8L), class = "data.frame")
# which results in
uid tndx A1 A2
1 1 1999.4 2 3
2 1 2000.1 2 3
3 1 2000.2 2 3
4 2 1999.4 10 14
5 2 2000.1 11 14
6 3 2000.1 1 2
7 3 2000.2 1 100
8 3 2000.3 1 2
如果您更喜欢分隔索引,请使用以下示例:
# Thx Andrie!
x2 <- data.frame(x, colsplit(x$tndx, "\\.", names=c("year", "qtr")))
有没有一个很好的方法来解决这个问题reshape2
, plyr
甚至是 base 还是你更愿意编写一个自定义函数?
请注意,也有可能uid
只出现一次。显然,您无法计算滞后差异。我仍然需要检查并创建一个 NA 。