Учитывая df=data.frame(x = seq(1:100), y = rnorm(100, mean=3, sd=0.5))
Я хотел бы создать новый вектор, чей i-й элемент определяется рассматриваемой строкой.Если это один из первых 3 элементов после подстановки данных в 5 поднаборов элементов, я бы хотел поставить «а», иначе «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)