【发布时间】:2015-05-18 12:36:55
【问题描述】:
我正在尝试找到一种快速的方法来执行以下操作:
- 确定数据库的年度四分位数
- 将数据库中的特定变量与其年度四分位数进行比较(匹配)
- 根据值,创建一个值为 0,1,2,3...(排序)的新变量
这是一个可重现的例子
library(data.table)
dt <- data.table(rep(seq.int(2000,2010,1),30), runif(330,0,5))
colnames(dt) <- c("year","response") # Ignore warning
quarts <- function(x) {
quantile(x, probs = seq(0.25,0.75,0.25),na.rm=T, names=T)
}
setkey(dt, year)
a <- data.table(dt[,quarts(response), by = key(dt)])
现在 data.table a 包含每年所需的 dt$response 的四分位数值。
我现在需要做的是将dt$response 的值与a 中的四分位数值进行比较,并创建一个新变量dt$quartresponse,它采用
- 如果
dt$response[i]小于该特定年份的四分位值 0.25,则值为 0 - 如果
dt$response[i]在该特定年份的四分位数介于 0.25 和 0.5 之间,则值为 1 - 如果
dt$response[i]在该特定年份的四分位值介于 0.50 和 0.75 之间,则值为 2 - 否则值为 3
我确信某种循环会起作用,但必须有一种更像 R 的方式来解决这个问题。
欢迎提出任何建议!
西蒙
【问题讨论】:
-
老实说,我真的不明白为什么人们对一般问题给予减分,尤其是当有可重复的例子时!欢迎任何解释......
-
在新的开发版本中(我忘了提及),只需
dcast就足够了。您可以从github.com/Rdatatable/data.table/wiki/Installation 安装开发版
标签: r data.table quantile