I want to add new column to my dataframe that only has two values ,1 and 0. 1 if either of the x, y, and z columns have an instance of 1, and 0 otherwise. For instance, with this rule, all but rows 6 and 9 have new column value as 1. But, my code does not work in this way.

I would appreciate if someone could help me on this.

```
set.seed(1)
x <- sample(1:3, 10, replace = TRUE)
y <- sample(1:3, 10, replace = TRUE)
z <- sample(1:3, 10, replace = TRUE)
df <- data.frame(x,y,z)
for (i in 1:nrow(df)){
if ((df$x[i] == 1)== TRUE | (df$y[i] == 1) == TRUE | (df$z[i] == 1) == TRUE){
df$new <- 1
}
else{
df$new <- 0
}
}
```

### >Solution :

You’ll need indices on your `new`

-variable. Note though that there are faster ways to achieve this end using the `apply`

-family instead of a loop (I am sure other’s will post these).

```
for (i in 1:nrow(df)){
if ((df$x[i] == 1) | (df$y[i] == 1) | (df$z[i] == 1)){
df$new[i] <- 1
}
else{
df$new[i] <- 0
}
}
```

We could even shorten it to, converting the logical to numeric:

```
for (i in 1:nrow(df)){
df$new[i] <- +((df$x[i] == 1) | (df$y[i] == 1) | (df$z[i] == 1))
}
```

Output:

```
df
x y z new
1 1 3 3 1
2 3 1 1 1
3 1 1 1 1
4 2 1 1 1
5 1 2 1 1
6 3 2 2 0
7 3 2 1 1
8 2 2 1 1
9 2 3 2 0
10 3 1 2 1
```