R:随着数据集的增长,基于通用滚动十进制创建一个因子变量

时间:2016-10-31 22:56:34

标签: r factors

我可以使用下面的代码为我的数据的十分位数创建一个因子变量,它考虑了整个历史记录:

`q <- quantile(x, seq(0,1,0.1), na.rm = TRUE)
decilab <- c("1st","2nd","3rd","4th","5th","6th","7th","8th","9th","10th")
q.factor <- cut(x, unique(q), included.lowest = TRUE, labels = decilab)`

但是,我需要在滚动的基础上对十进制进行泛型切割,只考虑标记点之前的历史记录。下面的代码使用for循环来计算滚动quantile作为9个不同的变量,但我不确定如何将其转换为单个因子变量(我也不特别想要/需要这些变量到存在)。

`for(i in 1:length(x)){
   D1[i] <- quantile(x[1:i],0.1, na.rm = TRUE)
   D2[i] <- quantile(x[1:i],0.2, na.rm = TRUE)
   D3[i] <- quantile(x[1:i],0.3, na.rm = TRUE)
   D4[i] <- quantile(x[1:i],0.4, na.rm = TRUE)
   D5[i] <- quantile(x[1:i],0.5, na.rm = TRUE)
   D6[i] <- quantile(x[1:i],0.6, na.rm = TRUE)
   D7[i] <- quantile(x[1:i],0.7, na.rm = TRUE)
   D8[i] <- quantile(x[1:i],0.8, na.rm = TRUE)
   D9[i] <- quantile(x[1:i],0.9, na.rm = TRUE)
}`

必须有更好的方法!谢谢你的帮助,如果这是一个常见的问题我很抱歉 - 到目前为止我还没有找到任何帮助。

编辑:道歉,因为我是Stack Overflow和R的新手。我想我有一个更好的例子,但我不确定如何重新提交这个问题。

假设您有向量x <- 1:1000,目标是将此数据剪切为包含cut(x, seq(0,1,0.1), include.lowest = TRUE)的十进制数,但是这会将整个系列x切换为包含[0,100), [100, 200)...etc的组,我的目标是,基于前面的数据,而不是整个向量,bucketing是可变的。基本上,每个单点都处于“最高十分位数”,因为该系列是线性的,但是对于随机序列,最新点的十分位数仅相对于前进点而不是整个序列确定。

我尝试了以下内容:

`for (i in 1:length(x)){
    z[i] <- as.numeric(cut(x[1:i], quantile(x[1:i], seq(0,1,.1))))[i]
 } `

然而,这不起作用

1 个答案:

答案 0 :(得分:0)

`library(dplyr)
x <- 1:1000
y<-vector(mode="numeric",length=0)
for (i in 1:length(x)){
   y[i]<-last(ntile(x[1:i],10))
}`

这似乎有效!

同事的建议是dplyr::ntile优于cut