我知道这不是解决解决方案的最惯用的方法(即不使用循环),但这正是我正在寻找的。该函数应遍历数据集的 ( ds) "a" 列 ( ds$a)。如果 columna的编号等于 1,该函数应该将 column 的值设置b为 0。我真的不知道如何解决这个问题,也没有任何代码可以提供。提前致谢。
编辑:我知道不使用循环是解决这个问题的最佳方法,但我再次在寻找一种方法来使它与标题的边界一起工作(创建一个在 for 循环内包含 if 语句的函数)谢谢你。
我知道这不是解决解决方案的最惯用的方法(即不使用循环),但这正是我正在寻找的。该函数应遍历数据集的 ( ds) "a" 列 ( ds$a)。如果 columna的编号等于 1,该函数应该将 column 的值设置b为 0。我真的不知道如何解决这个问题,也没有任何代码可以提供。提前致谢。
编辑:我知道不使用循环是解决这个问题的最佳方法,但我再次在寻找一种方法来使它与标题的边界一起工作(创建一个在 for 循环内包含 if 语句的函数)谢谢你。
正如你所说,有很多比循环更简单的方法来做到这一点。
但如果你必须...
# Create your dataframe
ds<-data.frame(a=c(1,2,3),b=c(1,1,1))
# Cycle through your dataframe
for (i in 1:nrow(ds)){
if (ds$a[i]==1){ds$b[i]=0}
}
如果你想有条件地replace取值b,你可以使用这个replace函数:
library(dplyr)
ds %>% mutate(b = replace(b, a==1, 0))
您不需要循环,这样就可以为您解决问题:
my_df <- data.frame("a" = c(1, 2, 3, 4, 1, 1, 5, 1),
"b" = c(1, 2, 3, 4, 1, 1, 5, 1),
stringsAsFactors = FALSE)
my_var <- which(my_df$a == 1)
if (length(my_var)) {
my_df[my_var, "b"] <- 0
}