Для цикла переименования объектов во фрейме данных ( игнорировать NA) в R

#r #dataframe #for-loop

Вопрос:

У меня есть фрейм данных, содержащий столбец с двоичными переменными (заостренными или широкими). Чтобы выполнить мои вычисления, мне нужно заменить их на 0 или 1. Я хочу написать цикл for, который делает это за меня.

Мой код:

 binary_To_Number<-function(df)
{
 for(i in df)
   {
      if(i=="pointed")
        {
          i<-1
        }
      else if(i=="broad")
        {
          i<-0
        }
      else if(is.na(i))
        {
          print("NA")
        }
      else
        {
          
        }
    }
}

binary_To_Number(town$shape)
 

Я попытался использовать этот фрагмент кода. Моя первая проблема с этим заключается в том, что я не знаю, как сохранить результаты. Поэтому мой код временно изменяет i, но не сохраняет его в df. Я знаю, что вы можете создать пустой вектор хранения для хранения результатов в нем, но могу ли я немедленно заменить переменную в моем df?
Вторая проблема заключается в том, что мой код останавливается и выдает мне сообщение об ошибке, если оно касается i, содержащего NA.

 Error in if (i == "pointed") { : missing value where TRUE/FALSE needed
 

Могу ли я что-то с этим поделать или мне сначала нужно заменить NA заполнителем?

Комментарии:

1. Преимущество R заключается в том, что уже существуют встроенные способы изменения вектора, например town$shape[town$shape=="pointed"] <- 1 .

Ответ №1:

Вы также можете использовать dplyr (гарантирует 0 для не указано):

 library(dplyr)
df <- df %>% 
  mutate(
    isPointed = as.integer(tolower(shape) == 'pointed')
  )
 

Выход:

     shape isPointed
1 Pointed         1
2   broad         0
3 pointed         1
 

Фрейм данных, который я использовал:

 df <- data.frame(
  shape = c('Pointed', 'broad', 'pointed'),
  stringsAsFactors = FALSE
)