Menu
[menu_adv_rtb]

Значение na: n/a — Викисловарь

Содержание

Исправление ошибки #Н/Д в функции ВПР

В этой статье описаны наиболее распространенные причины неправильного результата функции В ФУНКЦИИ ВЛП, а также рекомендации по использованию функций ИНДЕКС иПОЗ.

Совет: Кроме того, обратитесь к кратким справочнику: советы по устранению неполадок с #NA в удобном PDF-файле. Вы можете поделиться PDF-файлом с другими людьми или распечатать его для справки.

Проблема: искомое значение не находится в первом столбце аргумента

таблица


Одним из ограничений функции ВЛП является то, что она может искать только значения в левом большинстве столбцов в таблице. Если искомого значения нет в первом столбце массива, вы увидите #N/A.

В следующей таблице нам нужно узнать количество проданной капусты.


Ошибка #N/A, так как искомый аргумент «Ели» отображается во втором столбце (Продукты) аргумента table_array A2:C10. В этом случае Excel искать его в столбце A, а не в столбце B.


Решение:вы можете попытаться устранить эту проблему, настроив в этой области ссылку на правильный столбец. Если это невозможно, попробуйте передвигать столбцы. Это также может быть крайне невероятным, если у вас большие или сложные электронные таблицы, в которых значения ячеей являются результатом других вычислений, или, возможно, есть и другие логические причины, по которым просто невозможно перемещать столбцы. Решением является использование сочетания функций ИНДЕКС и ПОИСКПОЧ, которые могут искать значения в столбце независимо от их положения в таблице подытого. См. следующий раздел.


Вместо нее можно использовать индекс или СОВПАДЕНИЕ



Функции
ИНДЕКС и ВЫБОРПОЗ являются хорошими вариантами для многих случаев, когда функции ВЛИО8 не отвечают вашим требованиям. Ключевое преимущество index/MATCH заключается в том, что вы можете искать значения в столбце в любом месте таблицы подытогов. Индекс возвращает значение из указанной таблицы или диапазона в соответствии с его положением. Возвращает относительную позицию значения в таблице или диапазоне. Чтобы найти значение в таблице или массиве, укажите относительное положение значения в таблице или массиве, используйте функции ИНДЕКС и НАЙТИ В ФОРМУЛЕ.

Существует несколько преимуществ использования индекса и СОВПАДЕНИЯ вместо ВЛ ПРОСМОТР:


  • При этом возвращаемая величина не должна быть в том же столбце, что и в столбце подытовки. Это отличается от ВЛП, в котором возвращаемая величина должна быть в указанном диапазоне. Почему это важно? При использовании функции ВПР вам нужно знать номер столбца, содержащего значение. Хотя это может показаться не сложной задачей, это может оказаться утомительным, если у вас большая таблица и вам нужно подсчитать количество столбцов. Кроме того, если вы добавите или удалите столбец в таблице, вам придется пересчитать и обновить col_index_num столбца. При использовании функций ИНДЕКС и ПОИСКПОЗ не нужно подсчитывать столбцы.


  • С помощью функций ИНДЕКС и MATCH можно указать либо строку, либо столбец в массиве, либо указать и то, и другое. Это означает, что значения можно искать по вертикали и по горизонтали.


  • С помощью функций ИНДЕКС и ПОИСКПОЗ можно находить значения в любом столбце. В отличие от ВРОТ.В.В., в которой можно искать только значение в первом столбце таблицы, индекс и ВЫБОРПОЗ будут работать, если искомые значения есть в первом столбце, последнем или в любом другом месте между ними.


  • Индекс и MATCH обеспечивают гибкость динамической ссылки на столбец, содержащий возвращаемое значение. Это означает, что вы можете добавлять столбцы в таблицу, не нарушая индекс и MATCH. С другой стороны, при добавлении столбца в таблицу ВЛП разрывается, поскольку она создает статическую ссылку на таблицу.


  • Индекс и MATCH обеспечивает большую гибкость при совпадениях. Они могут найти точное совпадение или значение, которое больше или меньше искомой величины. ВПР ищет только наиболее близкое (по умолчанию) или точное значение. Кроме того, функция ВПР предполагает, что первый столбец в таблице отсортирован в алфавитном порядке, и возвращает первое наиболее близкое совпадение, поэтому вы можете получить не те данные, которые ожидали.

Синтаксис


Чтобы создать синтаксис функции ИНДЕКС или НАЙТИВКА, необходимо использовать аргумент массива или ссылки функции ИНДЕКС и вложенный в нее синтаксис ФУНКЦИИ НАЙТИВ. Это форма:


=ИНДЕКС(массив или ссылка; ПОИСКПОЗ(искомое_значение;массив;[тип_совпадения])

Заменим В ПРОСМОТР в примере выше с помощью индекса или MATCH. Синтаксис будет выглядеть следующим образом:


=ИНДЕКС(C2:C10;ПОИСКПОЗ(B13;B2:B10;0))

Что означает:


=ИНДЕКС(возвращает значение из C2:C10, которое будет ФУНКЦИЕЙ НАЙТИВ(Ольга, которая находится в массиве B2:B10, где возвращаемая величина является первым значением, соответствующим Значению Ольга))


Формула ищет в C2:C10 первое значение, соответствующее значению Капуста (B7), и возвращает значение в ячейке C7 (100).


Проблема: не найдено точное совпадение


Если range_lookup ложь и не удается найти точное совпадение в данных, возвращается #N/A.


Решение.Если вы уверены в том, что в вашей книге есть соответствующие данные, но не можете найти их, убедитесь, что в ячейках, на которые ссылается ссылка, нет скрытых пробелов или непечатаемых символов. Кроме того, убедитесь, что ячейки следуют за правильным типом данных. Например, ячейки с числами должны иметь формат «Число»,а не «Текст».

Кроме того, для очистки данных в ячейках можно использовать функцию CLEAN или TRIM.


Проблема: искомое значение меньше, чем наименьшее значение в массиве


Если range_lookup имеет значение ИСТИНА и искомого значения меньше наименьшего значения в массиве, вы увидите #N/A. Функция ищет приблизительное совпадение в массиве и возвращает ближайшее значение, которое меньше искомого.

В приведенном ниже примере искомое значение равно 100, но в диапазоне B2:C10 нет значений меньше 100, поэтому возникает ошибка.


Решение.

  • Исправьте искомое значение.

  • Если вы не можете изменить искомые значения и вам нужна большая гибкость, думайте об использовании индексов иПОЗ вместо ВЛИО (см. раздел выше в этой статье). Они позволяют находить значения больше или меньше искомого, а также равные ему. Дополнительные сведения см. в предыдущем разделе этой статьи.

Проблема: столбец подстановки не отсортирован в порядке возрастания


Если range_lookup имеет вид ИСТИНА и один из столбцов подытог не отсортировали в порядке возрастания (A–Z), вы увидите ошибку #N/A.


Решение.

  • Измените функцию ВПР так, чтобы искать точное совпадение. Для этого укажите для аргумента диапазон_поиска значение ЛОЖЬ. Для этого не требуется сортировка.

  • Для поиска значения в несортированной таблице можно также использовать функции ИНДЕКС и ПОИСКПОЗ.

Проблема: значение является большим числом с плавающей запятой


При наличии в ячейках значений времени или больших десятичных чисел Excel возвращает ошибку «#Н/Д» из-за точности чисел с плавающей запятой. Числа с плавающей запятой включают цифры после десятичной запятой. (Excel значения времени в качестве чисел с плавающей за точкой.) Excel не удается сохранить числа с очень большими плавающей за точкой, поэтому для правильной работы функции числа с плавающей за дробной частью необходимо округлять до 5 десятичных дробных мест.


Решение. Округлите числа до 5 десятичных разрядов с помощью функции ОКРУГЛ.


Дополнительные сведения


Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.



См. также



  • Исправление ошибки #Н/Д


  • ВLOOKUP: больше нет #NA


  • Арифметические данные с плавающей за точкой могут привести к неверным результатам в Excel

  • org/ListItem»>


    Краткий справочник: функция ВПР


  • Функция ВПР


  • Полные сведения о формулах в Excel


  • Рекомендации, позволяющие избежать появления неработающих формул


  • Обнаружение ошибок в формулах

  • org/ListItem»>


    Все функции Excel (по алфавиту)


  • Функции Excel (по категориям)

Исправление ошибки #Н/Д

Ошибка #Н/Д обычно означает, что формула не находит запрашиваемое значение.

Лучшее решение


Наиболее распространенной причиной ошибки #N/A является использование функций XLOOKUP, VLOOKUP, HLOOKUP, LOOKUP или MATCH, если формула не может найти указанное значение. Например, искомого значения нет в исходных данных.

В данном случае в таблице подстановки нет элемента «Банан», поэтому функция ВПР возвращает ошибку #Н/Д.


Решение. Убедитесь, что значение подстановки существует в исходных данных, или используйте обработчик ошибок, например IFERROR в формуле. Например, =IFERROR(FORMULA(),0), который говорит:

Вы можете указать «», чтобы не отображалось ничего, или подставить собственный текст: =ЕСЛИОШИБКА(ФОРМУЛА(),»Сообщение об ошибке»)



Если вы не знаете, что делать на этом этапе или какого рода помощь вам нужна, поищите похожие вопросы на форуме сообщества Excel или опубликуйте там свой вопрос.


Примечание: 
Если вам нужна справка по ошибке #Н/Д для конкретной функции, например ВПР или ИНДЕКС/ПОИСКПОЗ, щелкните здесь.

Если вы хотите работать дальше, приведенный ниже контрольный список поможет вам определить возможные причины проблем в формулах.





Искомое значение и исходные данные относятся к разным типам. Например, вы пытаетесь использовать ссылку на функцию ВПР как число, а исходные данные сохранены как текст.


Решение. Убедитесь, что типы данных одинаковы. Чтобы проверить формат ячеек, выберите ячейку или диапазон ячеек, щелкните правой кнопкой мыши и выберите пункт «Формат ячеек >Число » (или нажмите клавиши CTRL+1) и при необходимости измените числовую формат.

Совет: Если вам нужно принудительно изменить формат для целого столбца, сначала примените нужный формат, а затем выберите Данные > Текст по столбцам > Готово.


Начальные и конечные пробелы можно удалить с помощью функции СЖПРОБЕЛЫ. В приведенном ниже примере в функции ВПР используется вложенная функция СЖПРОБЕЛЫ для удаления начальных пробелов из имен в ячейках A2:A7 и возврата названия отдела.

=ВПР(D2,TRIM(A2:B7),2,FALSE)

Примечание: 24 сентября 2018 г. — Формулы динамического массива — Если у вас есть текущая версия Microsoft 365 и вы находитесь на канале быстрого выпуска Insiders, вы можете ввести формулу в верхнюю левую ячейку выходного диапазона и нажать клавишу Enter, чтобы подтвердите формулу в виде формулы динамического массива. Иначе формулу необходимо вводить с использованием прежней версии массива, выбрав диапазон вывода, введя формулу в левой верхней ячейке диапазона и нажав клавиши CTRL+SHIFT+ВВОД для подтверждения. Excel автоматически вставляет скобки в начале и конце формулы. Дополнительные сведения о формулах массива см. в статье Использование формул массива: рекомендации и примеры.


По умолчанию функции, которые ищут данные в таблицах, должны использовать сортировку по возрастанию. Но у функций ВПР и ГПР есть аргумент интервальный_просмотр, который сообщает функции, что нужно искать точное совпадение, даже если таблица не отсортирована. Чтобы найти точное совпадение, укажите для аргумента интервальный_просмотр значение ЛОЖЬ. Помните, что значение ИСТИНА, сообщающее функции о том, что нужно искать приблизительное совпадение, может привести к возвращению не только ошибки #Н/Д, но и ошибочных результатов, как видно в следующем примере.

В этом примере возвращается не только ошибка #Н/Д для элемента «Банан», но и неправильная цена для элемента «Черешня». К такому результату приводит аргумент ИСТИНА, который сообщает функции ВПР, что нужно искать не точное, а приблизительное совпадение. Здесь нет близкого совпадения для элемента «Банан», а «Черешня» предшествует элементу «Персик». В этом случае при использовании функции ВПР с аргументом ЛОЖЬ будет отображаться правильная цена для элемента «Черешня», но для элемента «Банан» все равно будет указана ошибка #Н/Д, потому что в списке подстановок его нет.

Если вы используете функцию ПОИСКПОЗ, попробуйте изменить значение аргумента тип_сопоставления, чтобы указать порядок сортировки таблицы. Чтобы найти точное совпадение, задайте для аргумента тип_сопоставления значение 0 (ноль).


Чтобы исправить ошибку, убедитесь, что диапазон, на который ссылается формула массива, содержит такое же количество строк и столбцов, что и диапазон ячеек, в котором была введена формула массива. Или введите формулу массива в меньшее или большее число ячеек в соответствии со ссылкой на диапазон в формуле.

В данном примере ячейка E2 содержит ссылку на несовпадающие диапазоны:

=СУММ(ЕСЛИ(A2:A11=D2;B2:B5))

Чтобы формула вычислялась правильно, необходимо изменить ее так, чтобы оба диапазона включали строки 2–11.

=СУММ(ЕСЛИ(A2:A11=D2;B2:B11))

Примечание: 24 сентября 2018 г. — Формулы динамического массива — Если у вас есть текущая версия Microsoft 365 и вы находитесь на канале быстрого выпуска Insiders, вы можете ввести формулу в верхнюю левую ячейку выходного диапазона и нажать клавишу Enter, чтобы подтвердите формулу в виде формулы динамического массива. Иначе формулу необходимо вводить с использованием прежней версии массива, выбрав диапазон вывода, введя формулу в левой верхней ячейке диапазона и нажав клавиши CTRL+SHIFT+ВВОД для подтверждения. Excel автоматически вставляет скобки в начале и конце формулы. Дополнительные сведения о формулах массива см. в статье Использование формул массива: рекомендации и примеры.


В данном случае для месяцев с мая по декабрь указано значение #Н/Д, поэтому итог вычислить не удается и вместо него отображается ошибка #Н/Д.


Чтобы исправить ошибку, проверьте синтаксис используемой функции и введите все обязательные аргументы, которые возвращают ошибку. Вероятно, для проверки функции вам потребуется использовать редактор Visual Basic. Открыть этот редактор можно на вкладке «Разработчик» или с помощью клавиш ALT+F11.


Чтобы исправить ошибку, убедитесь в том, что книга, содержащая пользовательскую функцию, открыта, а функция работает правильно.


Чтобы исправить ошибку, убедитесь в том, что аргументы функции верны и расположены в нужных местах.


Чтобы исправить ошибку, нажмите клавиши CTRL+ALT+F9 для пересчета листа.


Если вы не знаете точно, какие аргументы использовать, вам поможет мастер функций. Выделите ячейку с формулой, а затем перейдите на вкладку « Формула» на ленте и нажмите клавишу INSERT FUNCTION.

Excel автоматически запустит мастер.

Щелкните любой аргумент, и Excel покажет вам сведения о нем.


Значение #Н/Д может принести пользу. Значения #Н/Д часто используются в диаграммах с такими данными, как в приведенном ниже примере, поскольку эти значения не отображаются на диаграмме. В примерах ниже показано, как выглядит диаграмма со значениями 0 и #Н/Д.

В предыдущем примере значения 0 показаны в виде прямой линии вдоль нижнего края диаграммы, а затем линия резко поднимается вверх, чтобы показать итог. В следующем примере вместо нулевых значений используются значения #Н/Д.

Дополнительные сведения об ошибке #Н/Д в конкретных функциях см. в следующих статьях:



  • Исправление ошибки #Н/Д в функции ВПР

  • org/ListItem»>


    Исправление ошибки #Н/Д в функциях ИНДЕКС и ПОИСКПОЗ


К началу страницы


Дополнительные сведения


Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.



См. также



Преобразование чисел из текстового формата в числовой


Функция ВПР


ГПР


Функция ПРОСМОТР


Функция ПОИСКПОЗ


Общие сведения о формулах в Excel


Рекомендации, позволяющие избежать появления неработающих формул


Поиск ошибок в формулах


Сочетания клавиш в Excel


Все функции Excel (по алфавиту)


Функции Excel (по категориям)


Как исправить ошибку #Н/Д

Ошибка #Н/Д обычно указывает на то, что формула не может найти то, что ее просят найти.

Верхний раствор

Наиболее распространенная причина ошибки #Н/Д связана с функциями XПР, ВПР, ГПР, ПРОСМОТР или ПОИСКПОЗ, если формуле не удается найти значение, на которое указывает ссылка. Например, ваше значение поиска не существует в исходных данных.

В этом случае в таблице поиска нет «банана», поэтому функция ВПР возвращает ошибку #Н/Д.

Решение . Либо убедитесь, что искомое значение существует в исходных данных, либо используйте в формуле обработчик ошибок, например ЕСЛИОШИБКА. Например, =ЕСЛИОШИБКА(ФОРМУЛА(),0), что означает:

.

Вы можете использовать «», чтобы ничего не отображать, или заменить свой собственный текст: =ЕСЛИОШИБКА(ФОРМУЛА(),»Сообщение об ошибке»)

Если вы не знаете, что делать на этом этапе или какая помощь вам нужна, вы можете найти похожие вопросы на форуме сообщества Excel или опубликовать свой собственный.

Примечание:
Нажмите здесь, если вам нужна помощь по ошибке #Н/Д с определенной функцией, такой как ВПР или ИНДЕКС/ПОИСКПОЗ.

Если вы хотите двигаться дальше, следующий контрольный список содержит шаги по устранению неполадок, которые помогут вам выяснить, что могло пойти не так в ваших формулах.

Значение поиска и исходные данные имеют разные типы данных. Например, вы пытаетесь использовать функцию ВПР для ссылки на число, но исходные данные сохраняются в виде текста.

Решение : Убедитесь, что типы данных совпадают. Вы можете проверить форматы ячеек, выбрав ячейку или диапазон ячеек, затем щелкните правой кнопкой мыши и выберите Формат ячеек > Число (или нажмите Ctrl+1) и при необходимости измените числовой формат.

Совет:  Если вам нужно принудительно изменить формат для всего столбца, сначала примените нужный формат, затем вы можете использовать Данные > Текст в столбцах > Готово .

Вы можете использовать функцию TRIM для удаления всех начальных или конечных пробелов. В следующем примере используется функция TRIM, вложенная в функцию ВПР, чтобы удалить начальные пробелы из имен в A2:A7 и вернуть название отдела.

=ВПР(D2,ОТРЕЗКА(A2:B7),2,ЛОЖЬ)

Примечание.  24 сентября 2018 г. — Формулы динамического массива. Если у вас установлена ​​текущая версия Microsoft 365 и вы находитесь на канале Insiders Fast Release, вы можете ввести формулу в верхнюю левую ячейку выходных данных. диапазона, затем нажмите . Введите , чтобы подтвердить, что формула является формулой динамического массива. В противном случае формула должна быть введена как устаревшая формула массива, сначала выбрав выходной диапазон, введите формулу в верхнюю левую ячейку выходного диапазона, затем нажмите Ctrl+Shift+Enter для подтверждения. Excel вставляет фигурные скобки в начале и в конце формулы. Дополнительные сведения о формулах массива см. в разделе Рекомендации и примеры формул массива.

По умолчанию функции, которые ищут информацию в таблицах, должны быть отсортированы в порядке возрастания. Однако функции рабочего листа ВПР и ГПР содержат аргумент range_lookup , который указывает функции найти точное совпадение, даже если таблица не отсортирована. Чтобы найти точное совпадение, установите range_lookup аргумент равен FALSE. Обратите внимание, что использование TRUE, которое указывает функции искать приблизительное совпадение, может не только привести к ошибке #N/A, но и вернуть ошибочные результаты, как показано в следующем примере.

В этом примере не только «Банан» возвращает ошибку #Н/Д, но и «Груша» возвращает неправильную цену. Это вызвано использованием аргумента ИСТИНА, который указывает функции ВПР искать приблизительное совпадение, а не точное. Нет точного совпадения для «Банан», а «Груша» стоит перед «Персиком» в алфавитном порядке. В этом случае использование функции ВПР с аргументом ЛОЖЬ вернет правильную цену для «Груши», но «Банан» все равно приведет к ошибке #Н/Д, поскольку в списке поиска нет соответствующего «Банан».

Если вы используете функцию ПОИСКПОЗ, попробуйте изменить значение аргумента match_type , чтобы указать порядок сортировки таблицы. Чтобы найти точное совпадение, установите для аргумента match_type значение 0 (ноль).

Чтобы исправить это, убедитесь, что диапазон, на который ссылается формула массива, имеет то же количество строк и столбцов, что и диапазон ячеек, в котором была введена формула массива, или введите формулу массива в меньшее или большее количество ячеек, чтобы соответствовать диапазону ссылка в формуле.

В этом примере ячейка E2 содержит ссылки на несовпадающие диапазоны:

=СУММ(ЕСЛИ(A2:A11=D2,B2:B5))

Чтобы формула вычислялась правильно, ее необходимо изменить так, чтобы оба диапазона отображать строки 2–11.

=СУММ(ЕСЛИ(A2:A11=D2,B2:B11))

находятся на канале Insiders Fast release, вы можете ввести формулу в верхнюю левую ячейку выходного диапазона, а затем нажать Введите , чтобы подтвердить, что формула является формулой динамического массива. В противном случае формулу необходимо ввести как устаревшую формулу массива, сначала выбрав выходной диапазон, введите формулу в верхнюю левую ячейку выходного диапазона, а затем нажмите Ctrl+Shift+Enter для подтверждения. Excel вставляет фигурные скобки в начале и в конце формулы. Дополнительные сведения о формулах массива см. в разделе Рекомендации и примеры формул массива.

В этом случае май-декабрь имеют значения #Н/Д, поэтому Итог не может быть рассчитан и вместо этого возвращает ошибку #Н/Д.

Чтобы исправить это, проверьте синтаксис формулы используемой функции и введите все необходимые аргументы в формулу, которая возвращает ошибку. Это может потребовать входа в редактор Visual Basic (VBE) для проверки функции. Вы можете получить доступ к VBE на вкладке «Разработчик» или с помощью ALT + F11.

Чтобы исправить это, убедитесь, что рабочая книга, содержащая пользовательскую функцию, открыта и что функция работает правильно.

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

Чтобы исправить это, нажмите Ctrl+Atl+F9 для пересчета листа

Если вы не уверены в правильности аргументов, вы можете воспользоваться мастером функций. Выберите ячейку с нужной формулой, затем перейдите на вкладку Формула на ленте и нажмите Вставить функцию.

Excel автоматически загрузит мастер для вас:

При нажатии на каждый аргумент Excel предоставит вам соответствующую информацию для каждого из них.

#N/A может быть полезен! Общепринятой практикой является использование #N/A при использовании данных, подобных следующему примеру, для диаграмм, поскольку значения #N/A не отображаются на диаграмме. Вот примеры того, как выглядит диаграмма с 0 против #N/A.

В предыдущем примере вы увидите, что значения 0 нанесены на график и отображаются в виде плоской линии в нижней части диаграммы, а затем она поднимается вверх, отображая итог. В следующем примере вы увидите, что значения 0 заменены на #N/A.

Дополнительные сведения об ошибке #NA, появляющейся в определенной функции, см. в разделах ниже:

  • Исправьте ошибку #Н/Д в функции ВПР

  • Исправьте ошибку #Н/Д в функциях ИНДЕКС/ПОИСКПОЗ

Верх страницы

Нужна дополнительная помощь?

Вы всегда можете обратиться к эксперту в техническом сообществе Excel или получить поддержку в сообществе ответов.

См. также

Преобразование чисел, сохраненных в виде текста, в числа

Функция ВПР

Функция ГПР

функция ПРОСМОТР

ПОИСКПОЗ

Обзор формул в Excel

Как избежать неработающих формул

Обнаружение ошибок в формулах

Сочетания клавиш в Excel

Все функции Excel (по алфавиту)

Все функции Excel (по категориям)

Замена значений на NA

Замена значений на NA

Николас Тирни
14.

05.2021

При работе с отсутствующими значениями вы можете заменить значения отсутствующими значениями ( NA ). Это полезно в тех случаях, когда вы знаете происхождение данных и можете быть уверены, какие значения должны отсутствовать. Например, вы можете знать, что все значения «Н/Д», «Н/Д» и «Недоступно» или -99 или -1 должны отсутствовать.

naniar предоставляет функции для работы с этим типом проблем с помощью функции replace_with_na() . Эта функция является дополнением к tidyr::replace_na() , которая заменяет значение NA указанным значением, тогда как naniar::replace_with_na() заменяет значение NA:

  • tidyr::replace_na() : Отсутствующие значения преобразуются в значение (NA -> -99)
  • naniar::replace_with_na() : Значение становится пропущенным (-99 -> NA)

В этой виньетке мы опишем несколько простых вариантов использования этих функций и опишем, как они работают.

Во-первых, мы вводим небольшой вымышленный набор данных, df , который содержит некоторые общие черты набора данных с типами пропущенных значений, с которыми мы можем столкнуться. Это включает в себя несколько спецификаций отсутствующих значений, таких как «Н/Д», «Н/Д» и «Недоступно». А также некоторые распространенные числовые коды, например -9.8, -99 и -1.

df <- тиббл::триббл(
  ~ имя, ~ х, ~ у, ~ г,
  "Н/Д", 1, "Н/Д", -100,
  «Нет данных», 3, «Нет в наличии», -99,
  "н/д", н/д, "29", -98,
  "Нет в наличии", -99, "25", -101,
  «Джон Смит», -98, «28», -1) 

Использование

replace_with_na

Что, если мы хотим заменить значение -99 в столбце x отсутствующим значением?

Во-первых, давайте загрузим наниар :

 библиотека(наниар) 

Теперь указываем тот факт, что мы хотим заменить -99 на отсутствующее значение. Для этого мы используем аргумент replace и указываем именованный список, который содержит имена переменных и значение, необходимое для замены NA .

 df %>% replace_with_na (заменить = список (x = -99))
#> # Таблица: 5 x 4
#> имя x y z
#>    
#> 1 Н/Д 1 Н/Д -100
#> 2 N A 3 НЕТ -99
#> 3 Н/Д Н/Д 29 -98
#> 4 Недоступно NA 25 -101
#> 5 John Smith -98 28 -1 

А скажем, мы тоже хотим заменить -98?

 дф %>%
  заменить_с_на (заменить = список (х = с (-99, -98)))
#> # Таблица: 5 x 4
#> имя x y z
#>    
#> 1 Н/Д 1 Н/Д -100
#> 2 N A 3 НЕТ -99
#> 3 Н/Д Н/Д 29 -98
#> 4 Недоступно NA 25 -101
#> 5 John Smith NA 28 -1 

А что, если мы хотим заменить -99 и -98 во всех числовых столбцах x и z?

 дф %>%
  заменить_с_на (заменить = список (х = с (-99,-98),
                             г = с (-99, -98)))
#> # Таблица: 5 x 4
#> имя x y z
#>    
#> 1 Н/Д 1 Н/Д -100
#> 2 нет данных 3 нет данных нет данных
#> 3 Н/Д Н/Д 29нет данных
#> 4 Недоступно NA 25 -101
#> 5 John Smith NA 28 -1 

Использование replace_with_na() работает хорошо, когда мы знаем точное значение, которое нужно заменить, и для каких переменных мы хотим заменить, при условии, что переменных не так много. Но что вы делаете, когда у вас есть много переменных, которые вы хотите наблюдать?

Расширение

replace_with_na

Иногда у вас есть много одинаковых значений, которые вы хотите заменить. Например, -99 и -98 выше, а также варианты «NA», такие как «N/A», и «N/A», и «Not Available». У вас также могут быть определенные переменные, на которые вы хотите воздействовать этими правилами, или у вас могут быть более сложные правила, например, «влиять только на переменные, которые являются числовыми или символьными, с этим правилом».

Чтобы учесть эти случаи, мы позаимствовали варианты dplyr с областью действия и создали функции:

  • replace_with_na_all() Заменяет NA для всех переменных.
  • replace_with_na_at() Заменяет NA в подмножестве переменных, указанных в кавычках (например, c("var1", "var2")).
  • replace_with_na_if() Заменяет NA на основе применения операции к подмножеству переменных, для которых функция предиката (is. numeric, is.character и т. д.) возвращает TRUE.

Ниже мы сейчас рассмотрим несколько очень простых примеров использования этих функций, чтобы вы могли лучше понять, как ими пользоваться.

Использование

replace_with_na_all

Используйте replace_with_na_all() , если вы хотите заменить ВСЕ значения, которые соответствуют условию во всем наборе данных. Синтаксис здесь немного отличается и следует правилам rlang для выражения простых функций. Это означает, что функция начинается с ~ , и при ссылке на переменную вы используете .x .

Например, если мы хотим заменить все случаи -99 в нашем наборе данных, мы пишем:

df %>% replace_with_na_all (условие = ~.x == -99)
#> # Таблица: 5 x 4
#> имя x y z
#>    
#> 1 Н/Д 1 Н/Д -100
#> 2 нет данных 3 нет данных нет данных
#> 3 Н/Д Н/Д 29 -98
#> 4 Недоступно NA 25 -101
#> 5 John Smith -98 28 -1 

Аналогичным образом, если у вас есть набор (раздражающих) повторяющихся строк, таких как различные варианты написания «NA», то я предлагаю вам сначала выложить все оскорбительные случаи:

# выписываем все оскорбительные строки
na_strings <- c("Н/Д", "Н/Д", "Н/Д", "Н/Д", "Н/Д", "Недоступно", "Недоступно") 

Затем вы пишете ~. x %in% na_strings — что читается как «встречается ли это значение в списке строк NA».

дф %>%
  replace_with_na_all (условие = ~.x %in% na_strings)
#> # Таблица: 5 x 4
#> имя x y z
#>    
#> 1 <Н/Д> 1 <Н/Д> -100
#> 2 <Н/П> 3 <Н/П> -99
#> 3 <НП> НП 29 -98
#> 4 <Н/Д> -99 25 -101
#> 5 John Smith -98 28 -1 

Вы также можете использовать встроенные строки и числа в наниаре:

  • common_na_numbers
  • common_na_strings
 common_na_numbers
#> [1] -9 -99 -999 -9999 9999 66 77 88
common_na_strings
#> [1] "Н/Д" "Н/Д" "Н/Д" "#Н/Д" "Н/Д " " Н/Д" "Н/Д" "Н/Д"
#> [9] "Н/Д" "Н/Д" "н/д" "н/д" "н/д" "н/д" " "н/д" "н/д"
#> [17] "n/a" "a/a" "n/a" "NULL" "null" "" "\\?" "\\*"
#> [25] "\\." 

И вы можете заменить значения, соответствующие этим строкам или числам, например так:

 df %>%
  replace_with_na_all (условие = ~.x %in% common_na_strings)
#> # Таблица: 5 x 4
#> имя x y z
#>    
#> 1 <Н/Д> 1 <Н/Д> -100
#> 2  3 НЕТ в наличии -99
#> 3 <НП> НП 29 -98
#> 4 Недоступно -99 25 -101
#> 5 John Smith -98 28 -1 

replace_with_na_at

Это похоже на _all , но вместо этого в этом случае вы можете указать переменные, на которые вы хотите воздействовать установленным правилом. Это полезно в тех случаях, когда вы хотите указать правило, которое влияет только на выбранное количество переменных.

дф %>%
  replace_with_na_at(.vars = c("x","z"),
                     условие = ~.x == -99)
#> # Таблица: 5 x 4
#> имя x y z
#>    
#> 1 Н/Д 1 Н/Д -100
#> 2 нет данных 3 нет данных нет данных
#> 3 Н/Д Н/Д 29 -98
#> 4 Недоступно NA 25 -101
#> 5 John Smith -98 28 -1 

Хотя вы можете добиться этого с помощью обычного replace_with_na() , его использование более лаконично, replace_with_na_at() . Кроме того, вы можете указать правила как функцию, например, сделать значение NA, если показатель степени этого числа меньше 1:

дф %>%
  replace_with_na_at(.vars = c("x","z"),
                     условие = ~ exp(.x) < 1)
#> # Таблица: 5 x 4
#> имя x y z
#>    
#> 1 Н/Д 1 Н/Д Н/П
#> 2 нет данных 3 нет данных нет данных
#> 3 Н/Д Н/Д 29нет данных
#> 4 Недоступно Нет данных 25 Нет данных
#> 5 John Smith NA 28 NA 

replace_with_na_if

В некоторых случаях вы можете идентифицировать переменные на основе некоторого теста - is. character() - это символьные переменные? is.numeric() - Они числовые или двойные? и заданное значение внутри этого типа данных. Например,

дф %>%
  replace_with_na_if(.predicate = is.character,
                     условие = ~.x %in% ("Н/Д"))
#> # Таблица: 5 x 4
#> имя x y z
#>    
#> 1 <Н/Д> 1 <Н/Д> -100
#> 2 N A 3 НЕТ -99
#> 3 Н/Д Н/Д 29 -98
#> 4 Недоступно -99 25 -101
#> 5 Джон Смит -98 28 -1
# или же
дф %>%
  replace_with_na_if(.predicate = is.character,
                     условие = ~.x %in% (na_strings))
#> # Таблица: 5 x 4
#> имя x y z
#>    
#> 1 <Н/Д> 1 <Н/Д> -100
#> 2 <Н/П> 3 <Н/П> -99
#> 3 <Н/П> Н/П 29-98
#> 4 <Н/Д> -99 25 -101
#> 5 John Smith -98 28 -1 

Это означает, что вы можете применять правило ко многим переменным, которые удовлетворяют предварительно заданному условию. Это может быть особенно полезно, если у вас много переменных и вы не хотите перечислять их все, а также если вы знаете, что существует определенная проблема для переменных определенного класса.

Есть несколько альтернативных способов замены значений на NA в tidyverse, na_if и используя считыватель . В конечном счете, они не так выразительны, как функции replace_with_na() , но они очень полезны, если у вас есть только один вид значения, которое нужно заменить отсутствующим, и если вы знаете, что представляют собой отсутствующие значения при чтении данных.

dplyr::na_if

Эта функция позволяет заменять точные значения — аналогично replace_with_na() , но для всех столбцов во фрейме данных. Вот как вы могли бы использовать его в наших примерах.

# вместо:
df_1 <- df %>% replace_with_na_all(условие = ~.x == -99)
df_1
#> # Таблица: 5 x 4
#> имя x y z
#>    
#> 1 Н/Д 1 Н/Д -100
#> 2 нет данных 3 нет данных нет данных
#> 3 Н/Д Н/Д 29 -98
#> 4 Недоступно NA 25 -101
#> 5 Джон Смит -98 28 -1
df_2 <- df %>% dplyr::na_if(-99)
df_2
#> # Таблица: 5 x 4
#> имя x y z
#>    
#> 1 Н/Д 1 Н/Д -100
#> 2 нет данных 3 нет данных нет данных
#> 3 Н/Д Н/Д 29 -98
#> 4 Недоступно NA 25 -101
#> 5 Джон Смит -98 28 -1
# они одинаковы?
все. равно(df_1, df_2)
#> [1] TRUE 

Обратите внимание, однако, что na_if() может принимать только аргументы длины один. Это означает, что он не может захватывать другие операторы, такие как

.
na_strings <- c("Н/Д", "Н/Д", "Н/Д", "Н/Д", "Н/Д", "Недоступно", "Недоступно")
df_3 <- df %>% replace_with_na_all(условие = ~.x %in% na_strings) 
# Не работать:
df_4 <- df %>% dplyr::na_if(x = ., y = na_strings)
# Ошибка в check_length(y, x, fmt_args("y"), Glue("то же, что и {fmt_args(~x)}")) :
  # Аргумент "y" отсутствует, значение по умолчанию отсутствует 

Он также не может обрабатывать более сложные уравнения, когда вы хотите ссылаться на значения в других столбцах или значения меньше или больше другого значения.

поймать NA с readr

При чтении ваших данных вы можете использовать аргумент na внутри readr для замены определенных значений на NA. Например:

 # не запускать
dat_raw <- readr::read_csv("original.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *