Используя dplyr
, сначала конвертируйте переменную продукта в символ (из фактора), затем используйте case_when
library(dplyr)
data %>%
mutate_if(is.factor, as.character) %>%
mutate(product = case_when(product == "" & code == 44 ~ "shirt",
product == "" & code == 90 ~ "sweater",
TRUE ~ product))
code product
1 44 shirt
2 78 hat
3 21 shoe
4 90 sweater
5 100 umbrella
6 44 shirt
7 90 sweater
Используя base
, та же идея - сначала конвертируйте факторы в символ, а затем используйте ifelse
i <- sapply(data, is.factor)
data[i] <- lapply(data[i], as.character)
data$product[data$product == ""] <- ifelse(data$code[data$product == ""] == 44, "shirt", "sweater")
data
code product
1 44 shirt
2 78 hat
3 21 shoe
4 90 sweater
5 100 umbrella
6 44 shirt
7 90 sweater
Также стоит отметить, что если вы используете data.frame
с stringsAsFactors = FALSE
, то все преобразования коэффициентов становятся ненужными.