У меня есть небольшой кадр данных, как это:R: Как заменить строки в столбце с условием на второй столбец?
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
, и я хотел бы заменить «зеленый» на «желтый», где б == «красный»
Я могу выбрать эти строки по df[b=="red",]
но замена не работает. Я пробовал:
> 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
или
> 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
и
> 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
Ничего из этого не работает должным образом для моего вопроса. Каким будет самое простое решение? Большое спасибо, Треппенлифт.
Попробуйте 'df <- data.frame (a, b, strAsAsFactors = FALSE); df [df $ b == 'red', 1] <- 'yellow''. Проблема в том, что 'R' устанавливает' strAsAsFactors = TRUE' по умолчанию при вызове 'data.frame'. – bouncyball
вам также нужно иметь 2 условия: 'df $ b ==" red "' и 'df $ a ==" green "' incase of such cases in data –
@bouncyball Это решение работает нормально. Спасибо – treppenlift