Вероятно, вы хотите использовать функцию na.locf()
из пакета zoo , чтобы перенести последнее наблюдение вперед , чтобы заменить ваши значения NA.
Вот начало его примера использования на странице справки:
> example(na.locf)
na.lcf> az <- zoo(1:6)
na.lcf> bz <- zoo(c(2,NA,1,4,5,2))
na.lcf> na.locf(bz)
1 2 3 4 5 6
2 2 1 4 5 2
na.lcf> na.locf(bz, fromLast = TRUE)
1 2 3 4 5 6
2 1 1 4 5 2
na.lcf> cz <- zoo(c(NA,9,3,2,3,2))
na.lcf> na.locf(cz)
2 3 4 5 6
9 3 2 3 2
Когда у вас есть несколько двоичных данных, которые вы хотите отправить по сети, вы обычно не делаете этого, просто передавая биты и байты по проводу в необработанном формате. Зачем? потому что некоторые носители созданы для потокового текста. Вы никогда не знаете - некоторые протоколы могут интерпретировать ваши двоичные данные как управляющие символы (например, модем), или ваши двоичные данные могут быть испорчены, потому что базовый протокол может подумать, что вы ввели специальную комбинацию символов (например, как FTP переводит строку окончания).
Итак, чтобы обойти это, люди кодируют двоичные данные в символы. Base64 - один из этих типов кодировок.
Почему 64? Поскольку вы можете в целом полагаться на те же 64 персонажа, которые присутствуют во многих наборах символов, и вы можете быть достаточно уверенны в том, что ваши данные будут заканчиваться на другой стороне провода без искажений.
Из http://en.wikipedia.org/wiki/Base64
Термин Base64 относится к определенному кодированию передачи содержимого MIME. Он также используется в качестве общего термина для любой аналогичной схемы кодирования, которая кодирует двоичные данные, обрабатывая ее численно и переводя ее в представление базы 64. Конкретный выбор базы обусловлен историей кодирования набора символов: можно выбрать набор из 64 символов, который является частью подмножества, общего для большинства кодировок, а также для печати. Эта комбинация оставляет данные, которые вряд ли могут быть изменены при транзите через системы, такие как электронная почта, которые традиционно не были 8-битными.
Base64 может использоваться в различных контекстах:
- Evolution и Thunderbird используют Base64 для обфускации паролей электронной почты [1]
- Base64 может использоваться для передачи и хранения текста, который в противном случае мог бы вызвать столкновение с разделителем
- Base64 часто используется как быстрый, но небезопасный ярлык для скрытия секретов, не прибегая к накладным расходам на управление криптографическими ключами
- . Спамеры используют Base64 для обхода базовых средств защиты от спама, которые часто не декодируют Base64 и, следовательно, не могут обнаружить ключевые слова в закодированных сообщениях ,
- Base64 используется для кодирования символьных строк в файлах LDIF
- . Base64 иногда используется для встраивания двоичных данных в XML-файл с использованием синтаксиса, аналогичного ...... например. Закладки Firefox.html.
- Base64 также используется при общении с государственными устройствами фискальной печати (обычно через последовательные или параллельные порты), чтобы минимизировать задержку при передаче символов чека для подписания.
- Base64 используется для кодирования двоичных файлов, таких как изображения внутри скриптов, во избежание зависания внешних файлов.
- Может использоваться для вставки необработанных данных изображения в свойство CSS, такое как фоновое изображение.
Это текстовое кодирование двоичных данных, где в результате текст не имеет ничего, кроме букв, цифр и символов «+», «/» и «=». Это удобный способ хранения / передачи двоичных данных по носителям, которые специально используются для текстовых данных.
Но почему Base-64? Двумя альтернативами для преобразования двоичных данных в текст, которые сразу возникают на ум, являются:
Base-64 отображает 3 байта (8 x 3 = 24 бита) в 4 символах, которые занимают 6 бит (6 x 4 = 24 бит). Результат выглядит примерно так: «TWFuIGlzIGRpc3Rpb ...». Поэтому вздутие живота - всего лишь 4/3 = 1,3333333 раза по сравнению с оригиналом.
Использование Base64, которое я собираюсь описать здесь, несколько взломан. Итак, если вам не нравятся хаки, пожалуйста, не продолжайте.
У меня возникли проблемы, когда я обнаружил, что utf8 MySQL не поддерживает 4-байтные символы юникода, так как он использует 3-байтовую версию utf8 , Итак, что я сделал, чтобы поддерживать полный 4-байтовый юникод над utf8 MySQL? Ну, base64 кодирует строки при сохранении в базе данных и декодере base64 при извлечении.
Так как кодировка и декодирование base64 очень быстрая, это отлично работает.
У вас есть следующие пункты: обратите внимание:
Вы можете использовать вышеуказанный метод для любого механизма хранения, который не поддерживает unicode.
utf8
по-прежнему остается только тремя байтами; если вы хотите настоящую вещь, используйте utf8mb4
. Хороший взлом, но больше не нужен.
– TRiG
3 April 2018 в 10:49
Я использую его в практическом смысле, когда передаем большие двоичные объекты (изображения) через веб-службы. Поэтому, когда я тестирую веб-службу C # с использованием сценария python, двоичный объект можно воссоздать с небольшой магией.
[В python]
import base64
imageAsBytes = base64.b64decode( dataFromWS )
Кодирование Base-64 - это способ получения двоичных данных и превращения его в текст, чтобы его легче передавать в таких вещах, как данные электронной почты и HTML-формы.
Он используется для преобразования произвольных двоичных данных в текст ASCII.
Например, вложения электронной почты отправляются таким образом.
Помимо того, что уже было сказано, два очень распространенных применения, которые не были указаны, -
Хеши:
Хэши - это односторонние функции, которые преобразуют блок байтов в другой блок байтов фиксированного размера, такой как 128 бит или 256 бит (SHA / MD5). Преобразование полученных байт в Base64 значительно упрощает отображение хэша, особенно когда вы сравниваете контрольную сумму для целостности. Хэши так часто встречаются в Base64, что многие люди ошибочно принимают Base64 как хэш.
Криптография:
Поскольку ключ шифрования не обязательно должен быть текстовым, но необработанные байты иногда необходимо чтобы сохранить его в файле или базе данных, к которым подходит Base64. То же самое с результирующими зашифрованными байтами.
Обратите внимание, что хотя Base64 часто используется в криптографии, это не механизм безопасности. Любой может преобразовать строку Base64 обратно в исходные байты, поэтому ее нельзя использовать в качестве средства защиты данных, только в качестве формата для отображения или хранения необработанных байтов.
Сертификаты
x509 сертификаты в формате PEM кодируются базой 64. http://how2ssl.com/articles/working_with_pem_files/
В основном, я видел, что он использовался для кодирования двоичных данных в контекстах, которые могут обрабатывать только ascii или простые символы.
В первые дни компьютеров, когда межсистемная связь телефонной линии не была особенно надежной, использовался грязный метод проверки целостности данных: «бит четности». В этом методе каждый переданный байт должен иметь 7 бит данных, а восьмое - 1 или 0, чтобы заставить общее количество 1 бит в байте быть четным.
Следовательно, 0x01 будет передаваться как 0x81; 0x02 будет 0x82; 0x03 останется 0x03 и т. Д.
Чтобы продолжить эту систему, когда был задан набор символов ASCII, назначены символы только 00-7F. (Сегодня все символы, заданные в диапазоне 80-FF, являются нестандартными)
Многие маршрутизаторы дня поставили проверку на четность и перевод байт в аппаратное обеспечение, вынудив компьютеры, подключенные к ним, работать строго с 7-битные данные. Это силовые вложения электронной почты (и все другие данные, поэтому протоколы HTTP и SMTP основаны на тексте), которые должны быть преобразованы в текстовый формат.
Мало кто из маршрутизаторов выжил в 90-е годы. Я серьезно сомневаюсь, что любой из них используется сегодня.
«Схемы кодирования Base64 обычно используются, когда необходимо кодировать двоичные данные, которые необходимо сохранить и передать на носители, предназначенные для обработки текстовых данных. Это должно гарантировать, что данные остаются неизмененными без изменений во время транспортировки »(Wiki, 2017)
Пример может быть следующим: у вас есть веб-служба, которая принимает только символы ASCII. Вы хотите сохранить и затем перенести данные пользователя в другое место (API), но получатель хочет получить нетронутые данные. Base64 для этого. , , Единственным недостатком является то, что для кодирования base64 потребуется около 33% пространства, чем обычные строки.
Другой пример :: uenc = url encoded = aHR0cDovL2xvYy5tYWdlbnRvLmNvbS9hc2ljcy1tZW4tcy1nZWwta2F5YW5vLXhpaS5odG1s = http://loc.querytip.com/asics -men-s-gel-kayano-xii.html .
Как вы можете видеть, мы не можем поместить символ «/» в URL, если мы хотим отправить последний посещенный URL в качестве параметра, потому что мы разделили бы правило атрибута / значения для параметра «MOD rewrite» - GET.
Полный пример: « http://loc.querytip.com/checkout/cart/add/uenc /http://loc.magento.com/asics-men-s-gel-kayano-xii.html/product/93/"
Base64 может использоваться для многих целей.
Основная причина заключается в преобразовании двоичных данных в нечто проходимое.
Я иногда использую его для передачи данных JSON с одного сайта на другой, хранения информации в файлах cookie о пользователе.
Примечание: вы можете «использовать» его для шифрования - я не понимаю, почему люди говорят, что вы не можете, и что это не шифрование, хотя оно было бы легко разрушаемым и не одобрялось. Шифрование означает не что иное, как преобразование одной строки данных в другую строку данных, которая может быть либо позже расшифрована, либо нет, и это то, что делает base64.
Это в основном способ кодирования произвольных двоичных данных в тексте ASCII. Он занимает 4 символа на 3 байта данных, плюс, возможно, бит дополнений в конце.
По существу, каждый 6 бит ввода кодируется в 64-символьном алфавите. «Стандартный» алфавит использует A-Z, a-z, 0-9 и + и /, с = в качестве символа заполнения. Существуют версии, защищенные URL.
Википедия является достаточно хорошим источником дополнительной информации.
Некоторые транспортные протоколы позволяют передавать только буквенно-цифровые символы. Представьте себе ситуацию, когда управляющие символы используются для запуска специальных действий и / или которые поддерживают только ограниченную ширину бита для каждого символа. Base64 преобразует любой вход в кодировку, которая использует только буквенно-цифровые символы, +
, /
и =
в качестве символа заполнения.
Base64
Base64 является общим термином для ряда аналогичных схем кодирования, которые кодируют двоичные данные, обрабатывая его численно и переводя его в представление базы 64. Термин Base64 исходит из конкретной кодировки передачи содержимого MIME.
Схемы кодирования Base64 обычно используются, когда необходимо кодировать двоичные данные, которые необходимо хранить и передавать по носителям, которые предназначены для обработки текстовых данных , Это делается для того, чтобы данные сохранялись без изменений во время транспортировки. Base64 обычно используется в ряде приложений, включая электронную почту через MIME, и хранение сложных данных в XML.
Чтобы немного рассказать о том, что говорит Брэд: многие механизмы транспорта для электронной почты и Usenet и другие способы перемещения данных не являются «8-битными», что означает, что символы вне стандартного набора символов ascii могут быть искажены при транзите - например, 0x0D можно рассматривать как возврат каретки и превращаться в возврат каретки и линию. База 64 отображает все двоичные символы на несколько стандартных символов ascii и цифр и знаков препинания, поэтому они не будут искажены таким образом.