Привет, у меня есть данные панели, которые содержат 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. Итак, Фирма AAA
получила 1, BBB
получила 2, CCC
получила 3, DDD
получил 4, а EEE
получил 5, за 1997 год.
У меня есть настраиваемая функция, которая делает это все годы, но не может работать КАЖДЫЙ ГОД:
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)
- person akrun   schedule 23.01.2017aggregate(Income ~Year, df, quan)
- person akrun   schedule 23.01.2017df <- cbind(Firm,Year,Income)
создает матрицу строк. Это бесполезно для того, что вы хотите делать. Вместо этого используйтеdf <- data.frame(Firm,Year,Income)
. - person lmo   schedule 23.01.2017