#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
orcounty_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 году «.