【发布时间】: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