【问题标题】:Creating uneven sequences in R在 R 中创建不均匀序列
【发布时间】:2019-09-27 14:17:20
【问题描述】:

鉴于df=data.frame(x = seq(1:100), y = rnorm(100, mean=3, sd=0.5)) 我想创建一个新向量,其第 i 个元素由相关行确定。如果它是在将数据子集为 5 个元素子集之后的前 3 个元素之一,我想放一个“a”,否则放一个“b”。

输出如下所示:

1   2.6    a
2   3.5    a 
3   2.6    a
4   2.7    b
5   2.1    b
6   1.8    a
7   3.7    a
8   2.9    a
9   2.7    b
10  3.4    b

我唯一的想法是这个问题归结为如何创建不均匀的序列,因此标题。如果第 i 行是((5*j)-4):((5*j)-2) 创建的每个序列的成员,则将其称为 a,否则称为 b。但是我怎样才能创建这些值的向量呢?像下面这样的东西当然不会起作用,因为rows 中的每个元素本身就是一个序列,而不是序列中的所有数字。

>rows=vector()
>for (j in 1:(nrow(df)/5)) {
     rows[j]=((5*j)-4):((5*j)-2)
     }
>classify=vector()
>for (i in 1:(nrow(df))) {
  if (is.element(df[i,1], rows)) {
    classify[i]="a"
  } else {
    classify[i]="b"
  }
}
>df=cbind(df, classify)

【问题讨论】:

    标签: r


    【解决方案1】:

    你可以试试:

    rep_len(c(rep("a", 3), rep("b", 2)), nrow(df))
    
          x        y z
    1     1 3.467233 a
    2     2 2.599982 a
    3     3 3.941228 a
    4     4 2.833142 b
    5     5 4.070231 b
    6     6 3.835760 a
    7     7 3.688950 a
    8     8 2.882646 a
    9     9 3.071788 b
    10   10 3.358480 b
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-30
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-18
      • 2017-10-03
      • 1970-01-01
      相关资源
      最近更新 更多