У меня несбалансированный квартальный набор данных с пропущенными значениями.Я хочу вычесть переменную A2
из A1
в последующих кварталах.Обратите внимание, что я не хочу получать отличия от A2, но вычитать РАЗНЫЕ переменные друг от друга.Различия должны рассчитываться отдельно для каждого идентификатора.Помимо того, что меняются годы, такие как Q4 1999 и Q1 2000.
Я действительно не уверен, должен ли я здесь конкатенировать свой временной индекс, поскольку пакеты типа 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
или даже базовый, или вы бы предпочли написать пользовательскую функцию?
Обратите внимание, также возможно, что некоторые uid
встречаются только один раз.Очевидно, что вы не можете рассчитать лаговую разницу.Тем не менее, мне нужно проверить это и создать NA.