Я хочу заменить значения в факторной переменной в зависимости от другого столбца, не изменяя начальные уровни фактора.
Пример:
x <- structure(list(Payee = structure(c(NA, 1L, 2L),
.Label = c("0", "x"), class = "factor"), PayeeID_Hash = structure(c(NA, 1L,2L),
.Label = c("0x31BCA02","0xB672841"), class = "factor")),
row.names = c(NA,"tbl", "data.frame"))
> x
# A tibble: 3 x 2
Payee PayeeID_Hash
<fct> <fct>
1 NA NA
2 0 0x31BCA02
3 x 0xB672841
Когда Payee
равен '0'тогда соответствующее значение PayeeID_Hash
не должно существовать (т.е. оно должно быть NA
).Обратите внимание, что я не хочу сбрасывать уровень фактора 0x31BCA02
(он будет присутствовать в других строках, где Payee
имеет уровень x
).Кроме того, я хочу сохранить уровни PayeeID_Hash
такими, какие они есть (я не хочу заменять их другими значениями).
Ожидаемый результат:
> x
# A tibble: 3 x 2
Payee PayeeID_Hash
<fct> <fct>
1 NA NA
2 0 NA
3 x 0xB672841
Я мог бы сделать это с помощьюпреобразование коэффициента в символ и затем обратно в коэффициент как:
x %>%
mutate(PayeeID_Hash = as.character(PayeeID_Hash),
PayeeID_Hash = ifelse(Payee == "0", NA_character_, PayeeID_Hash),
PayeeID_Hash = as.factor(PayeeID_Hash))
Есть ли другой способ очистки (то есть более прямой) для этого?