【问题标题】:Create variable y=1 if row number between 1:200如果行号在 1:200 之间,则创建变量 y=1
【发布时间】:2016-05-13 04:11:47
【问题描述】:

我已按照连续变量的值对我的分析数据集进行降序排序,并希望为前 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'

非常感谢任何帮助!

【问题讨论】:

  • 问题是 ifelse() 的第一个参数必须是合乎逻辑的(即具有真/假值),这里似乎不是这种情况。我不会建议答案,因为看起来您已经找到了一些可以正常工作的方法。

标签: r sorting row


【解决方案1】:

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

这里你只想根据索引而不是数据给出不同的值,所以最简单的可能是:

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

【讨论】:

  • 太好了,谢谢 - 在括号内添加一个逗号,这样我们就有了 train1[1:200,]$y
【解决方案2】:

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

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

或者您可以将逻辑向量的整数表示与行数一起使用。

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

【讨论】:

  • @RichardScriven 我得到Error in rep(1:0, c(200, nrow(train1) - 200)) : invalid 'times' argument 当少于 200 行时
  • @HubertL - 我不是在你的答案中指行,。我指的是列,因为 data[1:200] 正如你所拥有的那样,它是前 200 列的子集。你需要的逗号就是我的意思。
【解决方案3】:

这是ifelse的另一个解决方案,

rain1$y <- ifelse(order(rain1$ALWAMT_FOLLOWING) <= 200, 1, 0) 

【讨论】:

    猜你喜欢
    • 2018-09-08
    • 2013-12-26
    • 1970-01-01
    • 2012-10-03
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多