【问题标题】:If-else error statement `the condition has length > 1`in R? [duplicate]if-else错误语句`条件长度> 1`在R中? [复制]
【发布时间】:2019-05-10 15:31:01
【问题描述】:

我正在编写一个简单的 ifelse 语句,然后尝试将索引分为三组(>= 0.8、0.8 到 -0.8、

我不断收到错误:

在 if (df$index >= 0.8) { : 条件长度 > 1 并且只有 将使用第一个元素

index <- c(0.8,0.2,-0.2,0,-1,-1)
df <- data.frame(index)
df$indexclass <- NA


df$indexclass  <- if (df$index >= 0.8) {
  df$indexclass  <- "P"
} else if (df$index <= (-0.8)) {
  df$indexclass  <- "A"
} else { df$indexclass <- "S"}

【问题讨论】:

  • 因为您的 length(df$index) 大于 1,它会向您发出警告。请改用ifelse

标签: r if-statement


【解决方案1】:

我们可以使用ifelse 代替if/else,因为if/else 需要一个长度为1 的向量,并且对于长度大于1 的向量不进行向量化。

df$indexclass  <- with(df, ifelse(index >= 0.8, "P",
        ifelse(index <= (-0.8),  "A", "S")))
df$indexclass
#[1] "P" "S" "S" "S" "A" "A"

如果有多个比较,选项将是cutfindInterval

c("A", "S","P")[with(df,  findInterval(index, c(-0.8, 0.8)))  + 1]
#[1] "P" "S" "S" "S" "A" "A"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    相关资源
    最近更新 更多