【问题标题】:How to cut data in even pieces in R? [duplicate]如何在R中将数据切成偶数? [复制]
【发布时间】:2013-12-14 20:23:12
【问题描述】:

问题是:我有一个数据集,比如说:

a <- c(0,0,0,0,1,1,1,1,1,1)

我想把它切成均匀的块(例如 5 块)。问题是我不能使用分位数或 cut 因为某些值重复,所以你不能设置不同的断点。

> quantile(a)
  0%  25%  50%  75% 100% 
   0    0    1    1    1 

(重复断点)

> cut(a, 5)
 [1] (-0.001,0.199] (-0.001,0.199] (-0.001,0.199] (-0.001,0.199] (0.801,1]     
 [6] (0.801,1]      (0.801,1]      (0.801,1]      (0.801,1]      (0.801,1]     
Levels: (-0.001,0.199] (0.199,0.4] (0.4,0.6] (0.6,0.801] (0.801,1]

(只使用了两个级别)

我知道我可以生成这样的向量:

b <- c(1,1,2,2,3,3,4,4,5,5)

并将其用于采样。或者我可以使用 for 循环和计数实例。但这需要循环和一些笨拙的编码。我正在寻找一个比这做得更好的简单高效(R 风格)的函数。

(我可以写,但我不想重新发明轮子。)

【问题讨论】:

    标签: r cut sampling


    【解决方案1】:

    您可以使用cut,但您必须在向量的数字索引上使用它,即seq(a),而不是向量本身。

    然后你用split将向量分成等长的片段:

    split(a, cut(seq(a), 5, labels = FALSE))
    

    这会返回一个包含五个短向量的列表。

    另一种方式,没有cut,由

    给出
    split(a, rep(seq(5), each = length(a) / 5))
    

    【讨论】:

      【解决方案2】:

      我认为这取决于你接下来要做什么。我喜欢昏暗:

      dim(a) <- c(2, length(a) / 2)
      

      现在看起来是这样的:

           [,1] [,2] [,3] [,4] [,5]
      [1,]    0    0    1    1    1
      [2,]    0    0    1    1    1
      

      【讨论】:

        猜你喜欢
        • 2020-12-18
        • 2021-01-16
        • 1970-01-01
        • 2019-03-25
        • 1970-01-01
        • 2021-04-24
        • 2017-06-20
        • 2020-06-18
        • 2014-09-16
        相关资源
        最近更新 更多