我有一个具有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
答案 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) } )