Я пытаюсь создать столбец ID на основе логических операторов для значений других столбцов. Например, в следующем фрейме данных
test <- structure(list(time = c(10L, 20L, NA, 30L), type = structure(c(1L,
2L, 3L, NA), .Label = c("A", "B", "C"), class = "factor"), ID = c(NA,
"1", NA, NA)), .Names = c("time", "type", "ID"), row.names = c(NA,
-4L), class = "data.frame")
который выглядит как
time type
1 10 A
2 20 B
3 NA C
4 30 NA
Я хочу создать новый столбец ID, содержащий значение 1 для всех time, которые не являются NA и все type, которые не являются A. Для этого я использую следующий код:
test$ID <- ifelse(is.na(test$time) | test$type == "A", NA, "1")
Это дает результат как
time type ID
1 10 A NA
2 20 B 1
3 NA C NA
4 30 NA NA
Однако этот код игнорирует NA в столбце type, что приводит к значению NA в столбце ID. Мне нужно, чтобы это значение было 1, поэтому мое необходимое решение должно дать:
time type ID
1 10 A NA
2 20 B 1
3 NA C NA
4 30 NA 1
Может ли кто-нибудь сказать мне, как я могу это сделать? Я мог бы заставить это работать с моим существующим кодом, если бы я мог каким-то образом изменить результат is.na(test$type), чтобы вернуть FALSE вместо TRUE, но я не уверен, как это сделать. Или, может быть, структура моего существующего кода должна быть полностью изменена? Я ценю любую помощь!