ЕСЛИ (функция ЕСЛИ) — Служба поддержки Майкрософт
Формулы и функции
-
Общие сведения о формулах в Excel
Статья -
ПРОСМОТРX
Статья -
ВПР
Статья -
Функция СУММ
Статья -
Функция СЧЁТЕСЛИ
Статья -
Функция ЕСЛИ
Статья -
ЕСЛИМН
Статья -
СУММЕСЛИ
Статья -
СУММЕСЛИМН
Статья -
ПОИСКПОЗ
Статья
Далее: Использование функций
Функция ЕСЛИ — одна из самых популярных функций в Excel. Она позволяет выполнять логические сравнения значений и ожидаемых результатов.
Поэтому у функции ЕСЛИ возможны два результата. Первый результат возвращается в случае, если сравнение истинно, второй — если сравнение ложно.
Например, функция =ЕСЛИ(C2=»Да»;1;2) означает следующее: ЕСЛИ(С2=»Да», то вернуть 1, в противном случае вернуть 2).
Функция ЕСЛИ, одна из логических функций, служит для возвращения разных значений в зависимости от того, соблюдается ли условие.
ЕСЛИ(лог_выражение; значение_если_истина; [значение_если_ложь])
Например:
Имя аргумента |
Описание |
---|---|
лог_выражение (обязательно) |
Условие, которое нужно проверить. |
значение_если_истина (обязательно) |
Значение, которое должно возвращаться, если лог_выражение имеет значение ИСТИНА. |
значение_если_ложь (необязательно) |
Значение, которое должно возвращаться, если лог_выражение имеет значение ЛОЖЬ. |
Простые примеры функции ЕСЛИ
-
=ЕСЛИ(C2=»Да»;1;2)
В примере выше ячейка D2 содержит формулу: ЕСЛИ(C2 = Да, то вернуть 1, в противном случае вернуть 2)
В этом примере ячейка D2 содержит формулу: ЕСЛИ(C2 = 1, то вернуть текст «Да», в противном случае вернуть текст «Нет»). Как видите, функцию ЕСЛИ можно использовать для сравнения и текста, и значений. А еще с ее помощью можно оценивать ошибки. Вы можете не только проверять, равно ли одно значение другому, возвращая один результат, но и использовать математические операторы и выполнять дополнительные вычисления в зависимости от условий. Для выполнения нескольких сравнений можно использовать несколько вложенных функций ЕСЛИ.
В примере выше функция ЕСЛИ в ячейке D2 означает: ЕСЛИ(C2 больше B2, то вернуть текст «Превышение бюджета», в противном случае вернуть текст «В пределах бюджета»)
На рисунке выше мы возвращаем не текст, а результат математического вычисления. Формула в ячейке E2 означает: ЕСЛИ(значение «Фактические» больше значения «Плановые», то вычесть сумму «Плановые» из суммы «Фактические», в противном случае ничего не возвращать).
В этом примере формула в ячейке F7 означает: ЕСЛИ(E7 = «Да», то вычислить общую сумму в ячейке F5 и умножить на 8,25 %, в противном случае налога с продажи нет, поэтому вернуть 0)
Примечание: Если вы используете текст в формулах, заключайте его в кавычки (пример: «Текст»). Единственное исключение — слова ИСТИНА и ЛОЖЬ, которые Excel распознает автоматически.
Распространенные неполадки
Проблема |
Возможная причина |
---|---|
0 (ноль) в ячейке |
Не указан аргумент значение_если_истина или значение_если_ложь. Чтобы возвращать правильное значение, добавьте текст двух аргументов или значение ИСТИНА/ЛОЖЬ. |
#ИМЯ? в ячейке |
Как правило, это указывает на ошибку в формуле. |
Дополнительные сведения
Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.
См. также
Функция ЕСЛИ — вложенные формулы и типовые ошибки
Функция УСЛОВИЯ
Использование ЕСЛИ с функциями И, ИЛИ и НЕ
СЧЁТЕСЛИ
Рекомендации, позволяющие избежать появления неработающих формул
Общие сведения о формулах в Excel
Знакомство с R (молниеносное и поверхностное).
- О курсе
- Презентации и данные
- Полезности
Собственно, сам R
RStudio — среда для разработки (IDE) на R
Онлайн IDE для R — на тот случай, если у вас не установлен R:
- https://rstudio. cloud
- Создайте папку, где будут храниться ВСЕ материалы курса. Например: Мы будем ее называть рабочей директорией. В эту папку помещайте ВСЕ файлы с кодом (с расширением .R).
- Внутри папки
linmodr
создайте папкуdata
, где будут храниться все файлы с данными для анализа.
В итоге у вас должно получиться примерно это:
C:\linmodr\ C:\linmodr\data\
Настройка RStudio
Все настройки RStudio находятся в меню Tools -> Global Options
- Восстановление рабочего пространства из прошлого сеанса — это лучше
отменить, т.к. обычно переменные-призраки очень мешают. На вкладке
General
убираем галочкуRestore .RData into workspace at startup
, и меняемSave workspace to .RData on exit
—Never
- Перенос длинных строк в окне кода — это удобно. На вкладке
Code
ставим галочку рядом с опциейSoft-wrap R source files
Комментарии в текстах программ обозначаются символом #
# это комментарии, они не будут выполняться
Ctrl + Shift + C
— закомментировать/раскомментировать выделенный фрагмент кодаCtrl + Enter
— отправляет активную строку из текстового редактора в консоль, а если выделить несколько строк, то будет выполнен этот фрагмент кода.Tab
илиCtrl + Space
— нажмите после того как начали набирать название функции или переменной, и появится список автоподстановки. Это помогает печатать код быстро и с меньшим количеством ошибок.
- В RStudio можно поставить курсор на слово
setwd
и нажатьF1
- Перед названием функции можно напечатать знак вопроса и выполнить
эту строку
?setwd
- Можно воспользоваться функцией
help()
help("setwd")
## [1] 4
1024/2
## [1] 512
## [1] 1 2 3 4 5 6 7 8 9 10
## [1] 136
## [1] 16
sqrt(27)
## [1] 5.196152
Оператор присваивания это символ стрелочки <-
. Он
работает справа налево, это значит, что значение выражения в его правой
части присваивается объекту в левой части.
Переменные — это такие контейнеры, в которые можно положить разные данные и даже функции.
Имена переменных могут содержать латинские буквы обоих регистров, символы точки . и подчеркивания _ , а так же цифры. Имена переменных должны начинаться с латинских букв. Создавайте понятные и “говорящие” имена переменных.
var_1 <- 1024 / 2 1238 * 3 -> var_2 var_2
## [1] 3714
Как выбрать название переменной?
a
— плохо, и дажеb
,с
, илих
. Но в некоторых случаях допустимо:)var1
— плохо, но уже лучшеvar_1
— плохо, но уже лучшеshelllength
— говорящее, но плохо читаетсяshell_length
,wing_colour
илиleg_num
— хорошие говорящие и читабельные названия
Данные в R можно хранить в виде разных объектов.
В результате выполнения следующих команд числа. Одно выражение — одно значение.
## [1] 23
sqrt(25)
## [1] 5
На самом деле, эти величины — просто векторы единичной длины
Векторы — один объект, внутри которого несколько значений.
Некоторые способы создания векторов:
- Оператор: используется для создания целочисленных векторов, где значения следуют одно за другим без пропусков
1:10 # от одного до 10
## [1] 1 2 3 4 5 6 7 8 9 10
-5:3 # от -5 до 3
## [1] -5 -4 -3 -2 -1 0 1 2 3
- Функция
seq()
создает последовательности из чисел
seq(from = 1, to = 5, by = 0.5)
## [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
- Функция
c()
— от англ. concatenate. Следите, чтобы было английское си, а не русское эс:).
?c # посмотрите хелп к функции
Функция c
принимает несколько (произвольное количество)
аргументов, разделенных запятыми. Она собирает из них вектор.
c(2, 4, 6)
## [1] 2 4 6
c(-9.3, 0, 2.17, 21.3)
## [1] -9.30 0.00 2.17 21.30
Векторы можно хранить в переменных для последующего использования
vect_num <- -11:12 # численный вектор от -11 до 12 сохранен в переменной vect_num vect_num_1 <- c(1. 3, 1.7, 1.2, 0.9, 1.6, 1.4) # численный вектор, сохранен в переменной vect_num_1
Адресация внутри векторов
При помощи оператора []
, можно обратится к некоторым
элементам вектора. В квадратных скобках вам нужно указать один или
несколько порядковых номеров элементов
vect_num[1] # первый элемент в векторе vect_num
## [1] -11
vect_num[10] # 10-й элемент
## [1] -2
vect_num[22]
## [1] 10
Если вам нужно несколько элементов, то их нужно передать квадратным скобкам в виде вектора. Например, нам нужны элементы с 3 по 5. Вот вектор, который содержит значения 3, 4 и 5.
## [1] 3 4 5
Если мы его напишем в квадратных скобках, то добудем элементы с такими порядковыми номерами
vect_num[3:5]
## [1] -9 -8 -7
Аналогично, если вам нужны элементы не подряд, то передайте вектор с номерами элементов, который вы создали при помощи функции c() c(2, 4, 6) # это вектор содержащий 2, 4 и 6, поэтому
vect_num[c(2, 4, 6)] # возвращает 2-й, 4-й и 6-й элементы
## [1] -10 -8 -6
vect_num[c(1, 10, 20)] # возвращает 1-й, 10-й и 20-й элементы
## [1] -11 -2 8
Вектор — одномерный объект. У его элементов только один порядковый номер (индекс). Поэтому при обращении к элементам вектора нужно указывать только одно число или один вектор с адресами.
Правильно:
vect_num[c(1, 2, 5)] # возвращает 1-й, 3-й и 5-й элементы
## [1] -11 -10 -7
Но R выдаст ошибку, если при обращении к вектору, вы не создавали вектор, а просто перечислили номера элементов через запятую.
vect_num[1, 3, 5] # ошибка vect_num[15, 9, 1] # ошибка
vect_num[c(15, 9, 1)] # правильно
## [1] 3 -3 -11
При помощи функции c() можно объединять несколько векторов в один вектор
c(1, 1, 5:9)
## [1] 1 1 5 6 7 8 9
c(vect_num, vect_num)
## [1] -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 ## [20] 8 9 10 11 12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 ## [39] 3 4 5 6 7 8 9 10 11 12
c(100, vect_num)
## [1] 100 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 ## [20] 7 8 9 10 11 12
Добываем 1, 3, 5 и с 22 по 24 элементы
vect_num[c(1, 3, 5, 22:24)]
## [1] -11 -9 -7 10 11 12
Числовые данные
Уже видели в прошлом разделе.
Текстовые данные
Каждый текстовый элемент (говорят “строка” — string или character) должен быть окружен кавычками — двойными или одинарными.
"это текст"
## [1] "это текст"
'это тоже текст'
## [1] "это тоже текст"
Текстовые значения можно объединять в вектора.
Это текстовый вектор
rainbow <- c("red", "orange", "yellow", "green", "blue", "violet") rainbow # весь вектор
## [1] "red" "orange" "yellow" "green" "blue" "violet"
Добываем первый и последний элементы
В данном случае я точно знаю, что их 6, мне нужны 1 и 6.
rainbow[c(1, 6)]
## [1] "red" "violet"
Добываем элементы с 3 по 6
Если у вас вдруг слишком короткий вектор в этом задании, то можно склеить новый из двух
double_rainbow <- c(rainbow, rainbow) double_rainbow
## [1] "red" "orange" "yellow" "green" "blue" "violet" "red" "orange" ## [9] "yellow" "green" "blue" "violet"
rainbow[3:6] # элементы с 3 по 6
## [1] "yellow" "green" "blue" "violet"
Логические данные
TRUE # истина
## [1] TRUE
FALSE # ложь
## [1] FALSE
Для ленивых — можно сокращать первыми заглавными буквами. Но лучше так не делать, чтобы читать программы было легче.
c(T, T, T, T, F, F, T, T)
## [1] TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE
Логический вектор
c(TRUE, TRUE, TRUE, FALSE, FALSE, TRUE)
## [1] TRUE TRUE TRUE FALSE FALSE TRUE
Еще логический вектор
short_logical_vector <- c(FALSE, TRUE)
Создаем длинный логический вектор.
Чтобы создавать длинные вектора из повторяющихся элементов, можно использовать функцию rep()
?rep
rep(x = 1, times = 3) # 1 повторяется 3 раза
## [1] 1 1 1
rep(x = "red", times = 5) # "red" повторяется 5 раз
## [1] "red" "red" "red" "red" "red"
rep(x = TRUE, times = 2) # TRUE повторяется 2 раза
## [1] TRUE TRUE
В R названия аргументов функций можно не указывать, если вы используете аргументы в том же порядке, что прописан в help к этой функции.
rep(TRUE, 5) # TRUE повторяется 5 раз, аргументы без названий
## [1] TRUE TRUE TRUE TRUE TRUE
Создаем логический вектор, где TRUE повторяется 3 раза, FALSE 3 раза и TRUE 4 раза. Результат сохраняем в переменной vect_log
vect_log <- c(rep(TRUE, 3), rep(FALSE, 3), rep(TRUE, 4)) vect_log
## [1] TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE TRUE TRUE
Применение логических векторов для фильтрации данных
Логические векторы создаются при проверке выполнения каких либо
условий, заданных при помощи логических операторов (>
, <
, ==
, !=
, >=
, <=
, !
, &
, |
).
Такие векторы можно использовать для фильтрации данных
Вспомните, у нас был вот такой текстовый вектор
double_rainbow
## [1] "red" "orange" "yellow" "green" "blue" "violet" "red" "orange" ## [9] "yellow" "green" "blue" "violet"
Задача 1. Допустим, мы хотим из этого вектора извлечь только желтый цвет.
Мы можем создать логический вектор, в котором TRUE будет только для 3-го и 9-го элементов
f_yellow <- double_rainbow == "yellow" f_yellow
## [1] FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
Этот логический вектор-фильтр мы можем использовать для извлечения
данных из double_rainbow
double_rainbow[f_yellow]
## [1] "yellow" "yellow"
Задача 2. Допустим, мы хотим извлечь из double_rainbow желтый и синий Желтый фильтр у нас уже есть, поэтому мы создадим фильтр для синего.
f_blue <- double_rainbow == "blue"
Выражение “желтый или синий” можно записать при помощи логического
“или” (|
)
f_yellow | f_blue
## [1] FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE TRUE FALSE TRUE FALSE
Задача решена, мы извлекли желтый и синий цвета.
double_rainbow[f_yellow | f_blue]
## [1] "yellow" "blue" "yellow" "blue"
То же самое можно было бы записать короче.
В одну строку — совершенно нечитабельно:
double_rainbow[double_rainbow == "yellow" | double_rainbow == "blue"]
## [1] "yellow" "blue" "yellow" "blue"
Фильтр отдельно — читается лучше:
f_colours <- double_rainbow == "yellow" | double_rainbow == "blue" double_rainbow[f_colours]
## [1] "yellow" "blue" "yellow" "blue"
У нас был числовой вектор
vect_num
## [1] -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 ## [20] 8 9 10 11 12
Задача 3. Давайте извлечем из числового вектора vect_num
только значения больше 0
vect_num[vect_num > 0]
## [1] 1 2 3 4 5 6 7 8 9 10 11 12
Задача 4. Давайте извлечем из вектора vect_num
все
числа, которые либо меньше или равны -8, либо больше или равны 8
f_5_8 <- (vect_num <= -8) | (vect_num >= 8) vect_num[f_5_8]
## [1] -11 -10 -9 -8 8 9 10 11 12
Факторы
Факторы — это способ хранения дискретных (=категориальных данных). Например, если вы поймали 10 улиток и посмотрели их цвет. У большого количества улиток небольшое счетное количество возможных цветов.
snail_colours <- c("red", "green", "green", "green", "yellow", "yellow", "yellow", "yellow") snail_colours # это текстовый вектор.
## [1] "red" "green" "green" "green" "yellow" "yellow" "yellow" "yellow"
Но цвет “желтый” обозначает одно и то же для каждой из улиток. Поэтому в целях экономии места можно записать цвета этих улиток в виде вектора, в котором численным значениям будут сопоставлены “этикетки” (называются “уровни” — levels) — названия цветов. Мы можем создать “фактор” цвет улиток.
factor(snail_colours)
## [1] red green green green yellow yellow yellow yellow ## Levels: green red yellow
уровни этого фактора
- 1 — green,
- 2 — red,
- 3 — yellow
По умолчанию, R назначает порядок уровней по алфавиту. Можно изменить
порядок (см. help("factor")
). Нам это пригодится позже
double_rainbow # текстовый вектор
## [1] "red" "orange" "yellow" "green" "blue" "violet" "red" "orange" ## [9] "yellow" "green" "blue" "violet"
Создаем фактор из текстового вектора и складываем его в переменную
f_double_rainbow <- factor(double_rainbow)
Как узнать, что за данные хранятся в переменной?
Чтобы узнать, что за данные хранятся в переменной, используйте
функцию class()
class(f_double_rainbow)
## [1] "factor"
class(vect_log)
## [1] "logical"
class(vect_num)
## [1] "integer"
class(rainbow)
## [1] "character"
Встроенные константы в R: NA, NULL, NAN, Inf
- NA — англ “not available”. Когда объект был, но его свойство не измерили или не записали.
- NULL — пусто — просто ничего нет
- NaN — “not a number”
- Inf — “infinity” — бесконечность
Вот текстовый вектор с пропущенным значением
rainbow_1 <- c("red", "orange", NA, "green", "blue", "violet")
Кстати, если попросили добыть из вектора номер элемента, которого там точно нет, то R выдаст NA, потому, что такого элемента нет
rainbow_1[198]
## [1] NA
Поэкспериментируем с векторами. Проверим, как работают арифметические операции
vect_num + 2
## [1] -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
vect_num * 2
## [1] -22 -20 -18 -16 -14 -12 -10 -8 -6 -4 -2 0 2 4 6 8 10 12 14 ## [20] 16 18 20 22 24
vect_num * (-2)
## [1] 22 20 18 16 14 12 10 8 6 4 2 0 -2 -4 -6 -8 -10 -12 -14 ## [20] -16 -18 -20 -22 -24
vect_num ^2
## [1] 121 100 81 64 49 36 25 16 9 4 1 0 1 4 9 16 25 36 49 ## [20] 64 81 100 121 144
Теперь посмотрим на встроенные константы в действии.
Создаем новый вектор для экспериментов
NAs_NANs <- c(1, 3, NA, 7, 0, 22:24)
Вот так он выглядит
NAs_NANs
## [1] 1 3 NA 7 0 22 23 24
Что произойдет с NA?
NAs_NANs + 2 # останется NA
## [1] 3 5 NA 9 2 24 25 26
NAs_NANs * 0 # останется NA
## [1] 0 0 NA 0 0 0 0 0
NAs_NANs / 0 # останется NA
## [1] Inf Inf NA Inf NaN Inf Inf Inf
Но в последнем случае вы увидите
- Inf при делении чисел на ноль
- NaN при делении нуля на ноль
NaN получится, если взять корень из отрицательного числа
sqrt(-1)
## Warning in sqrt(-1): NaNs produced
## [1] NaN
Вы уже видели массу функций, их легко узнать по скобкам после ключевого слова. Познакомимся еще с несколькими и научимся писать пользовательские функции. Пользовательские функции позволяют автоматизировать повторяющиеся действия и делают код легко читаемым.
Вот наш вектор
NAs_NANs
## [1] 1 3 NA 7 0 22 23 24
Длину вектора можно вычислить при помощи функции length()
length(NAs_NANs)
## [1] 8
Сумму элементов вектора при помощи функции sum()
sum(NAs_NANs)
## [1] NA
Упс! Почему-то получилось NA
Чтобы узнать, почему и как это исправить — посмотрите в help("sum")
. Выяснится, что у функции sum()
есть аргумент na.rm
, который по умолчанию принимает
значение FALSE
, то есть NA
не учитываются при
подсчете суммы.
Если мы передадим функции sum
аргумент na.rm = TRUE
, то получится правильная сумма
sum(NAs_NANs, na.rm = TRUE)
## [1] 80
Та же история с функцией mean
mean(NAs_NANs, na.rm = TRUE)
## [1] 11.42857
Попробуем написать пользовательскую функцию mmean()
,
которая будет по умолчанию считать среднее значение элементов в векторе
с учетом пропущенных значений (NA
)
mmean <- function(x){ mean(x, na.rm = TRUE) }
В этом коде: — mmean — переменная, название функции. В эту переменную
мы складываем функцию, которую создает функция function()
— function()
— функция, которая делает функции. В скобках
перечисляются аргументы (названия переменных, которые мы передаем в
функцию, чтобы она что-то сделала с ними) — { }
— в
фигурных скобках тело функции — последовательность действий, которую
нужно сделать с аргументами
У больших функций бывает еще инструкция return()
,
которая сообщает, что именно должна возвращать наша функция. Вот как
выглядела бы наша функция с этой инструкцией
mmean <- function(x){ res <- mean(x, na.rm = TRUE) return(res) }
Проверим нашу функцию при помощи встроенной функции
mean(vect_num, na.rm = TRUE)
## [1] 0.5
mmean(vect_num)
## [1] 0.5
Работает
Датафрейм — один из способов хранения табличных данных в R. Создадим датафрейм.
Для этого, для начала, создадим векторы с данными для переменных.
len <- 1:9 # числовой col <- c(rep("green", 4), rep("red", 5)) # текстовый wid <- seq(from = 2, by = 2, to = 18) # числовой
Теперь сложим эти векторы в датафрейм
my_worms <- data.frame(Length = len, Width = wid, Colour = col)
Можно проверить, действительно мы создали объект класса data.frame
class(my_worms) # смотрим, действительно датафрейм
## [1] "data.frame"
Содержимое датафрейма можно просмотреть несколькими способами
my_worms # печать датафрейма
## Length Width Colour ## 1 1 2 green ## 2 2 4 green ## 3 3 6 green ## 4 4 8 green ## 5 5 10 red ## 6 6 12 red ## 7 7 14 red ## 8 8 16 red ## 9 9 18 red
View(my_worms) # просмотр в RStudio head(my_worms)
## Length Width Colour ## 1 1 2 green ## 2 2 4 green ## 3 3 6 green ## 4 4 8 green ## 5 5 10 red ## 6 6 12 red
tail(my_worms)
## Length Width Colour ## 4 4 8 green ## 5 5 10 red ## 6 6 12 red ## 7 7 14 red ## 8 8 16 red ## 9 9 18 red
# fix(my_worms) # ручное редактирование. осторожно! избегайте его использовать, никаких документов о нем не останется
Адресация внутри датафреймов
Вывод столбца-переменной при помощи оператора $ и имени переменной
my_worms$Length
## [1] 1 2 3 4 5 6 7 8 9
my_worms$Width
## [1] 2 4 6 8 10 12 14 16 18
У каждой ячейки в датафрейме есть координаты вида [строка, столбец]
my_worms[2, 3] # вторая строка в 3 столбце
## [1] "green"
my_worms[2, ] # вторая строка целиком
## Length Width Colour ## 2 2 4 green
my_worms[1:9, 2] # строки с 1 по 9 во втором столбце
## [1] 2 4 6 8 10 12 14 16 18
my_worms[, 2] # второй столбец целиком
## [1] 2 4 6 8 10 12 14 16 18
Базовые графики
Скаттерплот (точечный график) — по оси х и y непрерывные числовые величины
plot(x = my_worms$Width, y = my_worms$Length)
Боксплот — по оси х дискретная величина, по оси y значение непрерывной величины. Черта — медиана, коробка — 25 и 75 перцентили, усы — либо размах варьирования, либо 1.5 интерквартильных расстояния (1.5 высоты коробки), если есть “выбросы”.
plot(x = as.factor(my_worms$Colour), y = my_worms$Length)
Для настройки внешнего вида см graphical parameters в help
На самом деле, мы не будем пользоваться этой системой графики, но об этом в следующих сериях
Графики из пакета ggplot2
В R есть более удобный (но, может быть, более многословный) пакет для рисования графиков — ggplot2. Чтобы использовать функции из пакета ggplot2, нужно его сначала установить.
Установка пакета в локальную библиотеку делается один раз. Поэтому
строку с install.packages()
не нужно включать в финальную
версию кода.
install.packages('ggplot2')
В текущей сессии работы в R пакет нужно активировать перед
использованием. Когда вы в следующий раз начнете работать с R, нужные
пакеты придется снова активировать. Поэтому строки с загрузкой пакетов
при помощи library()
обязательно должны остаться в
финальной версии кода.
library(ggplot2)
Нарисуем те же самые графики при помощи пакета ggplot2.
ggplot(data = my_worms) + geom_point(aes(x = Width, y = Length))
ggplot(data = my_worms) + geom_boxplot(aes(x = Colour, y = Length))
Добавляем для точек эстетику цвет (colour) из переменной Colour
ggplot(data = my_worms) + geom_point(aes(x = Width, y = Length, colour = Colour))
Графики можно сохранять в переменных, и использовать потом
gg <- ggplot(data = my_worms) + geom_point(aes(x = Width, y = Length, colour = Colour))
Чтобы вывести график, нужно напечатать название переменной.
Можно менять темы оформления графика. Если тема нужна только один раз, то прибавляем ее к графику
gg + theme_dark()
gg + theme_light()
gg + theme_classic()
Можно установить нужную тему до конца сессии.
theme_set(theme_bw()) gg
Подписи осей и легенд задает функция labs()
gg + labs(x = "Ширина", y = "Длина", colour = "Цвет")
Графики можно делить на фасетки при помощи facet_wrap или facet_grid
gg + facet_wrap(~Colour, nrow = 1)
Чтобы изменить подписи цветов, нужно изменить уровни соотв. фактора.
my_worms$col_rus <- factor(my_worms$Colour, levels = c("green", "red"), labels = c("Зеленый", "Красный")) ggplot(data = my_worms) + geom_point(aes(x = Width, y = Length, colour = col_rus)) + labs(x = "Ширина", y = "Длина", colour = "Цвет") + facet_wrap(~col_rus, nrow = 1)
Больше или равно (>=) — JavaScript
Оператор больше или равен ( >=
) возвращает true
, если
левый операнд больше или равен правому операнду, и ложь
в противном случае.
х >= у
Операнды сравниваются по тому же алгоритму, что и оператор «Меньше», с инвертированием результата. x >= y
обычно эквивалентно !(x < y)
, за исключением двух случаев, когда x >= y
и x < y
оба равны false
:
- выдает синтаксическую ошибку при передаче в
BigInt()
). - Если один из операндов преобразуется в
NaN
. (Например, строки, которые нельзя преобразовать в числа, илиundefined
.)
х >= у
обычно эквивалентно x > y || x == y
, за исключением нескольких случаев:
- Когда одно из
x
илиy
равноnull
, а другое не являетсяnull
и становится 0 при приведении к числовому (включая 9 0004 0 ,0n
,false
,""
,"0"
,new Date(0)
и т. д.):x >= y
istrue
, аx > y || х == у
равноложь
. - Когда одно из
x
илиy
равноundefined
, а другое является одним изnull
илиundefined
:x >= y
равноfalse
, аx == y
равноправда
. - Когда
x
иy
являются одним и тем же объектом, который становитсяNaN
после первого шага Меньше чем (например,new Date(NaN)
):x >= y
равноfalse
, аx == y
равноtrue
. - Когда
x
иy
являются разными объектами, которые становятся одним и тем же значением после первого шага Меньше чем:x >= y
равноtrue
, аx > y || x == y
равноfalse
.
Сравнение строк
"a" >= "b"; // ЛОЖЬ "а" >= "а"; // истинный "а" >= "3"; // истинный
Сравнение строки с числом
"5" >= 3; // истинный "3" >= 3; // истинный "3" >= 5; // ЛОЖЬ "привет" >= 5; // ЛОЖЬ 5 >= "привет"; // ЛОЖЬ
Сравнение номеров
5 >= 3; // истинный 3 >= 3; // истинный 3 >= 5; // ЛОЖЬ
Сравнение числа с BigInt
5n >= 3; // истинный 3 >= 3н; // истинный 3 >= 5н; // ЛОЖЬ
Сравнение логических значений, null, undefined, NaN
true >= false; // истинный правда >= правда; // истинный ложь >= истина; // ЛОЖЬ правда >= 0; // истинный правда >= 1; // истинный ноль >= 0; // истинный 1 >= ноль; // истинный не определено >= 3; // ЛОЖЬ 3 >= не определено; // ЛОЖЬ 3 >= NaN; // ЛОЖЬ NaN >= 3; // ЛОЖЬ
Спецификация |
---|
Спецификация языка ECMAScript # sec-relational-operators |
BCD загружаются только в браузере с включенным JavaScript. Включите JavaScript для просмотра данных.
- Больше, чем оператор
- Меньше, чем оператор
- Оператор меньше или равно
Обнаружили проблему с содержанием этой страницы?
- Отредактируйте страницу на GitHub.
- Сообщить о проблеме с содержимым.
- Посмотреть исходный код на GitHub.
Хотите принять более активное участие?
Узнайте, как внести свой вклад.
Последний раз эта страница была изменена участниками MDN.
Если еще и Вложенные, если еще
Операторы If-Else являются важной частью программирования R. В этом руководстве мы увидим различные способы применения условных операторов (If..Else вложенный IF) в R. В R есть много мощных пакетов для манипулирования данными. В более поздней части этого руководства мы увидим, как операторы IF ELSE используются в популярных пакетах.
Образец данных
Давайте создадим образец данных, чтобы показать, как выполнять функцию ЕСЛИ ИНАЧЕ. Этот фрейм данных будет использоваться далее в примерах.
x1 | x2 | х3 |
---|---|---|
1 | 129 | А |
3 | 178 | Б |
5 | 140 | С |
7 | 186 | Д |
9 | 191 | Э |
11 | 104 | Ф |
13 | 150 | Г |
15 | 183 | Х |
17 | 151 | я |
19 | 142 | Дж |
Запустите программу ниже, чтобы создать приведенную выше таблицу в R.
сет.сид(123) mydata = data.frame(x1 = seq(1,20,by=2), x2 = выборка (100:200,10,ЛОЖЬ), x3 = БУКВЫ [1:10])
x1 = seq(1,20,by=2) : Переменная 'x1' содержит альтернативные числа от 1 до 20. Всего это 10 числовых значений.
x2 = выборка(100:200,10,FALSE) : Переменная 'x2' представляет собой 10 неповторяющихся случайных чисел в диапазоне от 100 до 200.
x3 = БУКВЫ[1:10] : Переменная 'x3' содержит 10 алфавитов, начиная с A до Z.
Синтаксис функции ifelse() :
Функция ifelse() в R работает аналогично функции MS Excel ЕСЛИ. Синтаксис см. ниже:
. ifelse(условие, значение, если условие истинно, значение, если условие ложно)
Пример 1: простой оператор IF ELSE
Предположим, вас попросили создать двоичную переменную — 1 или 0 на основе переменной «x2». Если значение переменной 'x2' больше 150, присвойте 1, иначе 0.
mydata$x4 = если еще (mydata$x2>150,1,0)
В этом случае он создает переменную x4 в том же фрейме данных «mydata». Результат показан на изображении ниже:
ifelse : Output |
Создать переменную в новом фрейме данных
Предположим, вам нужно добавить созданную выше бинарную переменную в новый фрейм данных. Вы можете сделать это, используя приведенный ниже код -
х = если еще (мои данные $ х2> 150,1,0) новые данные = cbind (х, мои данные)
cbind() используется для объединения двух векторов, матриц или фреймов данных по столбцам.
Применить ifelse() к символьным переменным
Если переменная 'x3' содержит символьные значения - 'A', 'D', то переменная 'x1' должна быть умножена на 2. В противном случае она должна быть умножена на 3.
mydata$y = ifelse(mydata$x3 %in% c("A","D") ,mydata$x1*2,mydata$x1*3)
Результат показан в таблице ниже
х1 х2 х3 у 1 129 А 2 3 178 Б 9 5 140 С 15 7 186 Д 14 9191 Э 27 11 104 Ф 33 13 150 Г 39 15 183 Н 45 17 151 я 51 19 142 Дж 57
Пример 2. Вложенный оператор If ELSE в R
Несколько операторов If Else можно написать аналогично функции If в Excel. В этом случае мы говорим R умножить переменную x1 на 2, если переменная x3 содержит значения «A», «B». Если значения «C», «D», умножьте на 3. В противном случае умножьте на 4.
mydata$y = ifelse(mydata$x3 %in% c("A","B"), mydata$x1*2, ifelse(mydata$x3 %in% c("C","D"), mydata$x1*3, моиданные$x1*4))
Вы ненавидите указывать фрейм данных несколько раз для каждой переменной?
Вы можете использовать функцию with() , чтобы каждый раз не упоминать фрейм данных. Это ускоряет написание кода R.
mydata$y = with(mydata, ifelse(x3 %in% c("A","B") , x1*2, ifelse(x3 %in% c("C","D"), x1*3, x1*4)))
Специальные темы, связанные с IF ELSE
В этом разделе мы рассмотрим следующие темы -
- Как обрабатывать отсутствующие (NA) значения в IF ELSE.
- Как использовать операторы ИЛИ и И в IF ELSE
- Агрегированные или сводные функции и оператор IF ELSE
Обработка отсутствующих значений
Неверный метод
x = NA
ifelse(x==NA,1,0)
Результат: NA
Должно было быть возвращено 1.
Правильный метод 901 58
х = нет данных
ifelse( is.na(x) ,1,0)
Результат: 1
Функция is. na() проверяет, является ли значение NA или нет.
Использование операторов ИЛИ и И
Символ & используется для выполнения условий И
ifelse(mydata$x1<10 & mydata$x2>150,1,0)
Результат: 0 1 0 1 1 0 0 0 0 0
| символ используется для выполнения условий ИЛИ
ifelse(mydata$x1<10 | mydata$x2>150,1,0)
Результат: 1 1 1 1 1 0 0 1 1 0
Подсчет случаев, когда условие выполняется 900 11
В этом примере , мы можем подсчитать количество записей, в которых выполняется условие.
sum(ifelse(mydata$x1<10 | mydata$x2>150,1,0))
Результат: 7
Оператор If Else: Другой стиль
Есть еще один способ определить if.. оператор else в R. Этот стиль написания If Else в основном используется, когда мы используем условные операторы в циклах и функциях R. Другими словами, он используется, когда нам нужно выполнить различные действия на основе условия.
Синтаксис -
если (состояние) да иначе нет
k = 99
if(k > 100) 1 else 0
Результат: 0
If..Else If..Else Операторы
k = 100
if (k > 100){
print("Больше 100")
} else if (k < 100){
print("Меньше 100")
} else 9 0199 {
печать ("Равно 100")
}
Результат: "Равно 100"
If Else в популярных пакетах
1. dplyr package
if_else( условие, значение, если условие истинно, значение, если условие ложно, значение, если нет данных)
Следующая программа проверяет, является ли значение кратным 2
библиотека (dplyr) х=с(1,Н/Д,2,3) if_else(x%%2==0, "Кратно 2", "Не кратно 2", "Отсутствует")
Результат : Не кратное 2 Отсутствующий Кратность 2 Не кратное 2
Символ %% возвращает остаток после деления значения на делитель.