Оператор IF в R. Добавить новые элементы в новый столбец, если выполнены условия

#r #dataframe #analytics

#r #фрейм данных #аналитика

Вопрос:

Я пытаюсь добавить столбец во фрейм данных, где новый элемент в новом столбце имеет значение «1», если условия выполнены для этой конкретной строки.

Чтобы проверить условие, я выполняю итерацию по другому эталонному фрейму данных.

 county_list = (df$county_name[df$wolves_present_in_county==1 amp; df$year==2015])

for (i in df$county_name) {
  for (j in county_list) {
    if (df$county_name[i]==county_list[j])
    {
      df$wolvein2015 = 1
      break
    }
  }
}
  

Ошибка в выводе
Набор данных

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

1. Одно из значений в df$county_name or county_list равно NA и R не знает, как сравнивать NA с другими вещами, поэтому ваше if условие не выполняется.

2. Спасибо за это, я проверил значения NA с помощью anyNA(county_list) и anyNA(df $county_name), но оба вернули FALSE .

3. Вы обновляете весь столбец df$wolvein2015 = 1 для каждой строки?

4. Да, я допустил эту ошибку, я обновил ее и теперь делаю ее df $ wovlvein2015[i] = 1. Все та же проблема.

5. @curiousneel можете ли вы попробовать решение, которое я опубликовал ниже.

Ответ №1:

Я думаю, вы можете делать то, что хотите в базе R. Вот пример использования mtcars:

 cars <- mtcars
cars$new <- ifelse(cars$cyl == 4 amp; cars$mpg > 30, 1, 0)
  

Новый столбец добавляется с 0/1 на основе условий 2 других переменных.

Кстати, поскольку R является векторизованной парадигмой, вы должны использовать for циклы только в качестве последнего средства.

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

1. Спасибо, ниже приведена исходная задача, которую я намереваюсь выполнить: давайте определим округа с волками, присутствующими в 2015 году. Создайте переменную, равную 1, если волки присутствовали в округе в 2015 году. Другими словами, эта переменная должна быть закодирована равной 1 для всех лет в данных, если в 2015 году в округе были волки.

2. Правильно, поэтому просто создайте свой составной логический ifelse оператор, как в примере выше, и вы сгенерируете новую переменную со значениями, обусловленными логическими выходами.

3. Спасибо, этот подход мне помог.

Ответ №2:

Вот вариант с dplyr

 library(dplyr)
df %>%
     mutate(wolvein2015 =  ((year == 2015 amp; !is.na(year)) amp;  
         as.logical(wolves_present_in_county) amp; !is.na(wolves_present_in_county)))
  

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

1. Спасибо, но это добавляет столбец со всеми значениями, равными 0, как мне сделать следующее: «Давайте определим округа, в которых в 2015 году присутствовали волки. Создайте переменную, равную 1, если волки присутствовали в округе в 2015 году. Другими словами, эта переменная должна быть закодирована равной 1 для всех лет в данных, если в округе есть волки в 2015 году «.