【发布时间】:2017-01-23 02:50:38
【问题描述】:
您好,我有一个包含 3 列的面板数据:Firm、Year、Income。
Firm <- rep(c("AAA", "BBB", "CCC", "DDD", "EEE"), each = 20)
Year <- rep(seq(1997, 2016, 1), times = 5)
Income <- rnorm(100, mean = 50, sd = 10)
df <- cbind(Firm, Year, Income)
实际数据包含超过 5000 家公司,每家公司超过 50 年。但这是一个足够好的例子。
我想分别为所有公司每年的收入分配五分位数,并将其放入名为Quint 的新列中。
例如,对于 1997 年,公司 AAA 获得收入 50,公司 BBB 获得收入 49,公司 CCC 获得收入 48,公司 DDD 获得收入 47,公司 EEE 获得收入 46。所以公司1997 年,AAA 得了 1,BBB 得了 2,CCC 得了 3,DDD 得了 4,EEE 得了 5。
我有一个自定义函数可以多年来一直执行,但不能在每一年执行:
quan <- function (x){
y <-ifelse(x <= quantile(x, c(.2), na.rm = TRUE), 1,
ifelse(x > quantile(x, c(.2), na.rm = TRUE) & x <= quantile(x, c(.4), na.rm = TRUE), 2,
ifelse(x > quantile(x, c(.4), na.rm = TRUE) & x <= quantile(x, c(.6), na.rm = TRUE), 3,
ifelse(x > quantile(x, c(.6), na.rm = TRUE) & x <= quantile(x, c(.8), na.rm = TRUE), 4,
ifelse(x > quantile(x, c(.8), na.rm = TRUE), 5, NA)))))
y
}
每年如何做?谢谢。
【问题讨论】:
-
我认为您可以使用
cut和quantile作为休息时间。如果我们想每年执行一次,请使用aggregate或data.table或dplyr并将“年份”作为分组变量。另外,创建df <- data.frame(Firm, Year, Income)和aggregate(Income ~., df, quan) -
顺便说一句,对于每个公司、年份、组合,您只有一个观察结果。因此,如果它仅基于“年份”作为组,则
aggregate(Income ~Year, df, quan) -
您的代码
df <- cbind(Firm,Year,Income)创建了一个字符串矩阵。这对于您想要做的事情没有用。请改用df <- data.frame(Firm,Year,Income)。
标签: r panel-data custom-function