根据组为每行分配十分位

时间:2018-12-04 02:16:27

标签: r

我有一个具有10,000个观察值的数据框,并希望有一个新列,每行对应十进制。十分位分布应按年份分组。最好的方法是什么?

   year       value quartile
1  2000  2.55118169       NA
2  2000  0.79755259       NA
3  2000  0.16918905       NA
4  2001  1.73359245       NA
5  2001  0.41027113       NA
6  2001  0.73012966       NA
7  2002 -1.35901658       NA
8  2002 -0.80591167       NA
9  2002  0.48966739       NA
10 2003  0.88856758       NA
11 2003  0.05146856       NA
12 2003 -0.12310229       NA

2 个答案:

答案 0 :(得分:0)

使用dplyr这样的事情可能会得到您想要的。假设实际的mydata中每年有> = 10个值。

library(dplyr)
mydata <- mydata %>%
  group_by(year) %>%
  mutate(decile = ntile(value, 10)) %>%
  ungroup()

答案 1 :(得分:0)

ave函数为您提供通过对因子分组(在本例中为年份)来评估函数的结果。 dplyr::ntile函数在这里十分有用。

mydata$decile <- ave(mydata$value, mydata$year, FUN=function(x) { dplyr::ntile(x, 10) } )