У меня есть набор данных выглядит так
df1 <- data.frame(Id=c(1L,2L,3L,4L,5L),pricetag=c(NA,5,NA,3,NA),category=c(NA,"Z",NA,NA,"Y"),stringsAsFactors=F)
> df1
Id pricetag category
1 1 NA NA
2 2 5 Z
3 3 NA NA
4 4 3 NA
5 5 NA Y
для неотсутствующих значений ценника я хотел бы перекодировать переменную категории как «X». Так что я смотрю что-то вроде этого.
> df1
Id pricetag category
1 1 NA NA
2 2 5 X
3 3 NA NA
4 4 3 X
5 5 NA Y
Я не мог понять функцию ifelse()
с интеграцией !is.na()
.
Есть идеи?
Хорошо, я исправил это. Что делать, если у меня уже есть значение в переменной категории. Я немного модифицировал набор данных. Ваша функция перезаписывает и возвращает это значение "Y" в NA. Есть ли настройка, чтобы сохранить «Y» как есть при перекодировании «X»?
transform(df1, category = replace(category, !is.na(pricetag), "X"))
# Id pricetag category
#1 1 NA <NA>
#2 2 5 X
#3 3 NA <NA>
#4 4 3 X
#5 5 NA Y
И последнее, прошу прощения. Что, если, скажем, второе значение «категории» уже заполнено «Z». Как я могу преобразовать его в «X»? Функция только преобразует значения NA в «X». Извините, я сталкиваюсь с проблемами, когда я иду.
df1 <- data.frame(Id=c(1L,2L,3L,4L,5L),pricetag=c(NA,5,NA,3,NA),category=c(NA,"Z",NA,NA,"Y"),stringsAsFactors=F)
> df1
Id pricetag category
1 1 NA <NA>
2 2 5 Z
3 3 NA <NA>
4 4 3 <NA>
5 5 NA Y
> df1$category[which(!is.na(df1$pricetag))] <- 'X'
> df1
Id pricetag category
1 1 NA <NA>
2 2 5 X
3 3 NA <NA>
4 4 3 X
5 5 NA Y
Вызов which
идентифицирует строки df1
, которые не являются NA, а затем присваивает X
столбцу категории этих строк независимо от текущего значения. Это то, что вам было нужно?
Для меня то, как вы написали код, логически правильно, но оно преобразует каждое значение NA в «X» в столбце категории. Мне нужно преобразовать те, которые не пропали.