gpt4 book ai didi

r - 按百分位数分割向量

转载 作者:行者123 更新时间:2023-12-04 10:57:35 27 4
gpt4 key购买 nike

我需要将 R 中已排序的未知长度向量拆分为“前 10%,...,后 10%”
所以,例如,如果我有 vector <- order(c(1:98928)) ,我想把它分成 10 个不同的向量,每个向量大约代表总长度的 10%。

我试过使用 split <- split(vector, 1:10)但由于我不知道向量的长度,如果它不是多个,我会得到这个错误

data length is not a multiple of split variable



即使它的倍数和功能有效, split()不保持我的原始向量的顺序。这就是 split 给出的结果:
split(c(1:10) , 1:2)
$`1`
[1] 1 3 5 7 9

$`2`
[1] 2 4 6 8 10

这就是我想要的:
$`1`
[1] 1 2 3 4 5

$`2`
[1] 6 7 8 9 10

我是 R 的新手,我尝试了很多东西都没有成功,有谁知道如何做到这一点?

最佳答案

问题陈述
打破一个已排序的向量 x每 10% 分成 10 块。
请注意,对此有两种解释:

  • 按矢量索引切割 :
    split(x, floor(10 * seq.int(0, length(x) - 1) / length(x)))
  • 按矢量值切割(例如分位数) :
    split(x, cut(x, quantile(x, prob = 0:10 / 10, names = FALSE), include = TRUE))

  • 下面我将用数据做示范:
    set.seed(0); x <- sort(round(rnorm(23),1))
    特别是,我们的示例数据是正态分布而不是均匀分布的,所以按索引和按值切割是有本质区别的。
    结果
    按索引切割
    #$`0`
    #[1] -1.5 -1.2 -1.1
    #
    #$`1`
    #[1] -0.9 -0.9
    #
    #$`2`
    #[1] -0.8 -0.4
    #
    #$`3`
    #[1] -0.3 -0.3 -0.3
    #
    #$`4`
    #[1] -0.3 -0.2
    #
    #$`5`
    #[1] 0.0 0.1
    #
    #$`6`
    #[1] 0.3 0.4 0.4
    #
    #$`7`
    #[1] 0.4 0.8
    #
    #$`8`
    #[1] 1.3 1.3
    #
    #$`9`
    #[1] 1.3 2.4
    按分位数切割
    #$`[-1.5,-1.06]`
    #[1] -1.5 -1.2 -1.1
    #
    #$`(-1.06,-0.86]`
    #[1] -0.9 -0.9
    #
    #$`(-0.86,-0.34]`
    #[1] -0.8 -0.4
    #
    #$`(-0.34,-0.3]`
    #[1] -0.3 -0.3 -0.3 -0.3
    #
    #$`(-0.3,-0.2]`
    #[1] -0.2
    #
    #$`(-0.2,0.14]`
    #[1] 0.0 0.1
    #
    #$`(0.14,0.4]`
    #[1] 0.3 0.4 0.4 0.4
    #
    #$`(0.4,0.64]`
    #numeric(0)
    #
    #$`(0.64,1.3]`
    #[1] 0.8 1.3 1.3 1.3
    #
    #$`(1.3,2.4]`
    #[1] 2.4

    关于r - 按百分位数分割向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38547998/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com