如果行号在1:200之间,则创建变量y = 1

时间:2016-02-03 19:27:35

标签: r sorting row

我已经按连续变量的值降序对分析数据集进行了排序,并希望为前200行中的记录创建指标变量y = 1,否则为y = 0。

我第一次遇到这个问题:

train1 <- train1[order(-train1$ALWAMT_FOLLOWING),]
train1$y <- ifelse(train1[1:200,], 1, 0) 

返回错误:

Error in ifelse(train1[1:200, ], 1, 0) : 
  (list) object cannot be coerced to type 'logical'

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:6)

不要为ifelse()而烦恼。您可以使用rep()创建矢量。

train1$y <- rep(1:0, c(200, nrow(train1) - 200))

或者您可以使用具有行计数的逻辑向量的整数表示。

train1$y <- as.integer(seq_len(nrow(train1)) <= 200)

答案 1 :(得分:5)

ifelse()用于根据测试返回值。

在这里,您只想根据索引而不是数据给出不同的值,因此最简单的可能是:

train1$y <- 0
train1[1:min(200, nrow(train1)),]$y <- 1

答案 2 :(得分:0)

以下是ifelse

的另一种解决方案
rain1$y <- ifelse(order(rain1$ALWAMT_FOLLOWING) <= 200, 1, 0)