# first I'll create two dummy variables (Year, Score)
year <- rep(2001:2005, 2)
score <- round(rnorm(10, 35, 3))
# then coerce variables to data frame
d <- data.frame(year, score)
# then you can use split() function to apply
# function to each stratum of grouping variable
sapply(split(score, year), function(x) quantile(x, probs=seq(.1, .9, .1)))
Year <- c(2000,2008,2008,2000,2000)
Fees <- c(1000,1050,2000,1700,2000)
dat <- data.frame(Fees,Year,result=NA)
res <- tapply(Fees,Year,function(x) rank(x,ties.method="max")/length(x))
for(i in 1:length(res))
dat[Year==as.numeric(names(res)[i]),"result"] <-res[[i]]
7条答案
按热度按时间pdtvr36n1#
根据Vince的解决方案,您还可以使用
plyr
或by
来执行此操作:wtlkbnrh2#
使用
ave
zzoitvuj3#
我可能误会了,但我想可以这样做:
是这样吗?
我指的是每个观察结果的实际百分比。-瑞安·罗萨里奥
编辑:
我想这可能会做到这一点:
使用您的数据:
编辑二:
这可能更快:
f()
已矢量化:-)最后,修改,我保证:-)。如果你想要的名字:
ef1yzkbh4#
使用data.table也是非常直接的,只是为了完整性,也是找到data.table解决方案的一种简单方法。
c6ubokkw5#
你也可以这样做:
输出将如下所示:
如果你愿意,你可以利用t()函数来转置行和列。编写一个函数将是解决这类问题的好方法。我强烈推荐Hadley Wickam编写的plyr包。
希望这对你有帮助!祝你一切顺利!
dsekswqp6#
我找到了一个方法,但它需要一个循环。
group.var是对数据进行分组的变量。在我的问题示例中,它是Year。comparable包含我们要查找其百分位数的值。在我的问题中,comparable是Score。
对于以下数据,我得到了以下结果:
然后,我可以将这些百分比重新绑定到原始数据框架中,以便进行分析、报告等。
有人有不需要循环的解决方案吗?
yqhsw0fo7#
不如这样:
其产生: