r - 在 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
并且变量保持不变。
解决方案
==
目前,您的所有表达式在相等或赋值运算符的两侧都保持不同的长度, <-
. 具体来说:
在这里,
if(df$index == 10)
将向量df$index的所有值与一个值进行比较,10
该值返回一个逻辑向量,其中只有一个TRUE
作为第 10 个元素:[FALSE, FALSE, FALSE, ..., TRUE, FALSE, FALSE, FALSE ...]
。检查通过print(df$index == 10)
。因此警告只使用第一个值:
FALSE
. 随后,没有值被更新,因为if
返回FALSE
。在这里,用一个值覆盖df$Species
df$Species <- "test"
的所有值(即所有行)。但这被忽略了,因为返回。"test"
if
FALSE
在这里,用一个值覆盖df$Sepal.Length
df$Sepal.Length <- 100
的所有值(即所有行)。但这被忽略了,因为返回。100
if
FALSE
很可能,您的意思是通过索引更新单行值,无需任何 if
逻辑或新列row.names
即可通过简单地索引向量然后相应地重新分配单个值来处理:
df$Species[10] <- "test"
df$Sepal.Length[10] <- 100
推荐阅读
- python - How to get user auth info in FastAPI, when using `app.add_route()` for GraphQL?
- c++ - Using a smart pointer to a struct from a C library which hides the implementation via typedef's (i.e. incomplete type)
- c++ - WriteProcessMemory fails inside function
- python - Group based on same items in list in dataframe (python)
- java - SearchView: go to another layout as enter is pressed in Android
- css - react native: creating blurred elevation (android)
- sympy - 评估 sympy 函数的解对
- python - Python 上的图形 plt.plot 不会显示
- javascript - 无法读取未定义的 javascript 数组的属性“长度”
- java - 如何让 Avro SchemaBuilder 在两个“记录”之间构建映射模式?