Это может ответить на вопрос, или вам нужны 0-1 в качестве значений строк?
library(tidyverse)
dat <- tribble(~ID, ~cd1, ~cd2, ~cd3, ~cd4,
1, "231", "219", "1321", "2314",
2, "222", "" , "" , "",
3, "123", "142", "" , "",
4, "145", "521", "2313", "122")
dat %>%
gather("cd_type", "code", 2:5) %>%
mutate(flag_var = case_when(
startsWith(code, "231") ~ 1,
TRUE ~ 0
))
#> # A tibble: 16 x 4
#> ID cd_type code flag_var
#>
#> 1 1 cd1 231 1
#> 2 2 cd1 222 0
#> 3 3 cd1 123 0
#> 4 4 cd1 145 0
#> 5 1 cd2 219 0
#> 6 2 cd2 "" 0
#> 7 3 cd2 142 0
#> 8 4 cd2 521 0
#> 9 1 cd3 1321 0
#> 10 2 cd3 "" 0
#> 11 3 cd3 "" 0
#> 12 4 cd3 2313 1
#> 13 1 cd4 2314 1
#> 14 2 cd4 "" 0
#> 15 3 cd4 "" 0
#> 16 4 cd4 122 0
Или сделать это, чтобы вернуться в исходный широкоформатный формат
dat %>%
gather("cd_type", "code", 2:5) %>%
mutate(flag_var = case_when(
startsWith(code, "231") ~ 1,
TRUE ~ 0
)) %>%
spread(cd_type, code) %>%
select(ID, cd1:cd4, flag_var)
#> # A tibble: 6 x 6
#> ID cd1 cd2 cd3 cd4 flag_var
#>
#> 1 1 219 1321 0
#> 2 1 231 2314 1
#> 3 2 222 "" "" "" 0
#> 4 3 123 142 "" "" 0
#> 5 4 145 521 122 0
#> 6 4 2313 1
Создано в 2019-01-19 пакетом Представить (v0.2.1) sup>
Согласно Википедии:
Текущий стандарт
Универсальные мандаты синтаксиса URI, что новые схемы URI, которые предусматривают представление символьных данных в URI, должны, в действительности, представить символы от незарезервированного набора без перевода, и должен преобразовать все другие символы в байты согласно UTF-8, и затем процент - кодирует те значения. Это требование было представлено в январе 2005 с публикацией RFC 3986. Схемы URI, представленные перед этой датой, не затронуты.
Не обращенный текущей спецификацией то, что сделать с закодированными символьными данными. Например, в компьютерах, символьных декларациях данных в закодированной форме, на некотором уровне, и таким образом мог рассматриваться или как двоичные данные или как символьные данные, будучи отображенным на символах URI. По-видимому, это до спецификаций схемы URI, чтобы составлять эту возможность и потребовать один или другой, но на практике, немногие, если таковые имеются, на самом деле сделать.
Нестандартные реализации
Там существует нестандартное кодирование для символов Unicode: %uxxxx, где xxxx является значением Unicode, представленным как четыре шестнадцатеричных цифры. Это поведение не указано никаким RFC и было отклонено W3C. Третий выпуск ECMA-262 все еще включает Escape (строка) функция, которая использует этот синтаксис, но также и encodeURI (uri) функция, которая преобразовывает в UTF-8, и процент - кодирует каждый октет.
Так, это похоже на полностью до человека, пишущего незакодировать метод... Разве стандарты не являются забавой?
То, что я всегда делал, является первым UTF-8, кодируют строку Unicode для создания этого серией 8-разрядных символов прежде, чем выйти из любого из тех, которые имеют %HH.
P.S. - я могу только надеяться, что нестандартные реализации (%uxxxx) немногочисленны.
Начиная с URI были представлены, прежде чем unicode был вокруг, или по крайней мере в широком использовании, я предполагаю, что это очень конкретный вопрос реализации. Кодировка UTF-8 Ваш текст, затем выходя из этого на нормальный походит на лучшую идею, так как это полностью назад совместимо с любыми системами ASCII/ANSI на месте, хотя Вы могли бы получить нечетный странный символ или два.
На другом конце, для декодирования Вы не вышли бы из своего текста и получили бы строку UTF-8. Если кто-то использующий более старую систему пытается отправить Вашему некоторые данные в ASCII/ANSI, нет никакого причиненного вреда, это уже - (почти) UTF-8, закодированный.