R: How do I replace strings in a column with condition to a second column?

2.8k Views Asked by At

I have a small data frame like this:

a<-c("green","green","green","green","green","green","green","green","green","green")
b<-c("blue","red","blue","red","blue","red","blue","red","blue","red")
df<-data.frame(a,b)
df
       a    b
1  green blue
2  green  red
3  green blue
4  green  red
5  green blue
6  green  red
7  green blue
8  green  red
9  green blue
10 green  red

and I would like to replace the "green" by "yellow" where b=="red"

I can select these rows by df[b=="red",] but the replacement doesn't work. I tried:

> df[b=="red",]$a<-gsub("green","yellow",df[b=="red",])
Fehler in `$<-.data.frame`(`*tmp*`, "a", value = c("c(1, 1, 1, 1, 1)",  : 
  replacement has 2 rows, data has 5

or

> df$a[subset(df$a,df$b=="red")]<-"yellow"
Warnmeldung:
In `[<-.factor`(`*tmp*`, subset(df$a, df$b == "red"), value = c(NA,  :
  invalid factor level, NA generated
> df
       a    b
1   <NA> blue
2  green  red
3  green blue
4  green  red
5  green blue
6  green  red
7  green blue
8  green  red
9  green blue
10 green  red

and

> df[b=="red",]$a<-"yellow"
Warnmeldung:
In `[<-.factor`(`*tmp*`, iseq, value = c("yellow", "yellow", "yellow",  :
  invalid factor level, NA generated
> df
       a    b
1  green blue
2   <NA>  red
3  green blue
4   <NA>  red
5  green blue
6   <NA>  red
7  green blue
8   <NA>  red
9  green blue
10  <NA>  red

None of this works properly for my issue. What would be the simplest solution? Many thanks, Treppenlift.

1

There are 1 best solutions below

1
On BEST ANSWER

You can use the which functionality. For some examples see http://www.endmemo.com/program/R/which.php.

df[which(df[,2]=="red"),1] <- "yellow"