【发布时间】:2019-12-04 02:52:11
【问题描述】:
我看到这篇关于 for 循环中的 ifelse 语句的帖子:
How to create new variables using loop and ifelse statement
var1 <- c(0,0,1,2)
var2 <- c(2,2,2,0)
var3 <- c(0,0,0,2)
var4 <- c(1,2,2,2)
df<-as.data.frame(cbind(var1,var2,var3,var4))
df
var1 var2 var3 var4
0 2 0 1
0 2 0 2
1 2 0 2
2 0 2 2
根据帖子,输出将是:
var1 var2 var3 var4 new
0 2 0 1 1
0 2 0 2 0
1 2 0 2 1
2 0 2 2 0
因为如果在一行中的任何元素中有 1,则该列中的相应行(新)将为 1,否则将为 0
我是这样写的:
for (i in 1:nrow(df)){
if(mean(df[i,] == 1) == 0){
df$new[i]<- 0}
else{
df$new[i]<- 1
}}
但是,它给出了这个输出:
var1 var2 var3 var4 new
0 2 0 1 1
0 2 0 2 1
1 2 0 2 1
2 0 2 2 1
如果我将代码 if(mean(df[i,] == 1) == 0) 修改为 if(mean(df[i] == 1) == 0) 那么它可以工作,但在其他情况下,如果我通过在某个位置包含 1 来修改数据框,那么 if(mean(df[i,] == 1) == 0) 是正确的,而不是 if(mean(df[i] == 1) == 0 )。
谁能解释这种行为?以及如何将我的循环修改为始终正确? 任何解释都非常感谢!
【问题讨论】:
-
似乎什么也没做,还是一样
标签: r for-loop if-statement