【问题标题】:Error in if condition {: argument is of length zeroif 条件 {: 参数长度为零时出错
【发布时间】:2018-05-23 19:04:50
【问题描述】:

我有一个 R 数据框 df,如下所示:

ID        End_week
2500076   1223
6801102   1325
6801282   1308
6803252   1426
9882106   1426
9894112   1217

我想插入一个新列 status,其值为 0/1 - 如果 End_week 等于 1426 则为 1,否则为 0。最终输出应如下所示:

ID        End_week   Status
2500076   1223       0
6801102   1325       0
6801282   1308       0
6803252   1426       1
9882106   1426       1
9894112   1217       0

我写了一个while循环,如下所示:

while(i<=length(df$End_week)) {
  if(df$End_week[i]==1426) {
    status[i] <- 1
  } else {
    status[i] <- 0
  }
  i=i+1
}

但是,我收到以下错误:

Error in if (df$End_week[i] == 1426) { : 
  argument is of length zero

我知道之前有人问过这个问题,所以我referredtheseanswers,但在我的场景中没有发现它们有帮助。我检查了End_week 列中的任何NA 值,但没有。有人可以建议出路吗?

【问题讨论】:

  • df$Status &lt;- ifelse(End_week == 1426, 1, 0)df$Status &lt;- ifelse(End_week == '1426', 1, 0) 取决于 df$Status 的类
  • 或者只是将逻辑向量转换为integer,即as.integer(End_week == 1426)
  • @CPak - 太酷了。我不知道这个技巧。它对我有用!谢谢。

标签: r while-loop


【解决方案1】:

我建议您研究数据帧子集,因为您错过了 r 的实质性好处。

df$Status <- 0
df$Status[df$End_week == 1426] <- 1

【讨论】:

  • 这也很有帮助。谢谢!
猜你喜欢
  • 2019-10-08
  • 2012-08-31
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多