首页 > 解决方案 > 在 IF 语句中执行多个操作

问题描述

我想根据另一个变量的条件更改多个变量的值

就像是:

df <- iris
df$index <- row.names(df)

if(df$index == 10){
  df$Species <- "test";
  df$Sepal.Length <- 100
}

因此,如果索引值为 10,那么我想将 Species 更改为“test”并将 sepal.length 更改为 100。

相反,我收到警告:

Warning message:
In if (df$index == 10) { :
  the condition has length > 1 and only the first element will be used

并且变量保持不变。

标签: rif-statement

解决方案


==目前,您的所有表达式在相等或赋值运算符的两侧都保持不同的长度, <-. 具体来说:

  • 在这里,if(df$index == 10)将向量df$index的所有值与一个值进行比较,10该值返回一个逻辑向量,其中只有一个 TRUE作为第 10 个元素:[FALSE, FALSE, FALSE, ..., TRUE, FALSE, FALSE, FALSE ...]。检查通过print(df$index == 10)

    因此警告只使用第一个值:FALSE. 随后,没有值被更新,因为if返回FALSE

  • 在这里,用一个值覆盖df$Speciesdf$Species <- "test"的所有值(即所有行)。但这被忽略了,因为返回。"test"ifFALSE

  • 在这里,用一个值覆盖df$Sepal.Lengthdf$Sepal.Length <- 100的所有值(即所有行)。但这被忽略了,因为返回。100ifFALSE

很可能,您的意思是通过索引更新单行值,无需任何 if逻辑或新列row.names即可通过简单地索引向量然后相应地重新分配单个值来处理:

df$Species[10] <- "test"
df$Sepal.Length[10] <- 100

推荐阅读