【发布时间】:2016-10-31 22:56:34
【问题描述】:
我可以使用下面的代码为我的数据的十分位数创建一个因子变量,该代码考虑了整个历史记录:
`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 但是,我的目标是分组是变量,仅基于前面的数据,而不是整个向量。所以本质上,每一个点都在“顶部十分位”中,因为这个系列是线性的,但是对于随机系列,最新点的十分位仅相对于前几个点确定,而不是整个系列。
我尝试了以下方法:
`for (i in 1:length(x)){
z[i] <- as.numeric(cut(x[1:i], quantile(x[1:i], seq(0,1,.1))))[i]
} `
这不起作用
【问题讨论】:
-
在 Stack Overflow 上询问有关代码的问题时,请提供包含数据的最小、完整、可验证的示例。在
r标签描述中,它特别要求您使用dput()共享必要的数据。 stackoverflow.com/help/mcve -
正如所写的那样,这对我来说没有任何意义。分位数用于连续值,因子用于离散值。我建议您尝试使用任何类型的变量的小数据集创建一个示例,然后使用三分位数展示您对它的期望。
-
目标是让分配给 x[n] 的“十分位数”基于 x[1:n] 中的数据范围并排除 x[ 范围内的数据(n+1):inf]