我可以使用下面的代码为我的数据的十分位数创建一个因子变量,它考虑了整个历史记录:
`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]
} `
然而,这不起作用
答案 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