У меня есть этот вектор:
x <- c("De 1 a 2 semanas", "De 3 a 4 semanas", "Más de 6 semanas", "Menos de 1 semana")
И я пытаюсь извлечь каждое значение по уникальному идентификатору:
str_extract(x, "1 sem|1 a 2|3 a 4|5 a 6|de 6 sem")
И это работает:
[1] "1 a 2" "3 a 4" "de 6 sem" "1 sem"
Однако, когда я вызываю вектор из кадра данных:
> x$PVS9
[1] "De 1 a 2 semanas" "De 3 a 4 semanas" "Más de 6 semanas" "Menos de 1 semana"
> x$PVS9 <- str_extract(x$PVS9, "1 sem|1 a 2|3 a 4|5 a 6|de 6 sem")
> x$PVS9
[1] "1 a 2" NA NA "1 sem"
Почему он дает эти два NA
?
PS: Вам может пригодиться этот вопрос (и его ответ).
Вот минимальный воспроизводимый пример:
> dput(x)
structure(list(PVS9 = c("De 1 a 2 semanas", "De 3 a 4 semanas",
"Más de 6 semanas", "Menos de 1 semana"), n = c(1L, 1L, 1L, 3L
), Porcentaje = c(0.17, 0.17, 0.17, 0.5)), row.names = c(NA,
-4L), class = c("tbl_df", "tbl", "data.frame"))
Токовый выход:
> str_extract(x$PVS9, "1 sem|1 a 2|3 a 4|5 a 6|de 6 sem")
[1] "1 a 2" NA NA "1 sem"
Желаемый вывод:
[1] "1 a 2" "3 a 4" "de 6 sem" "1 sem"
Дополнительная информация:
Информация о сеансе:
> sessionInfo()
R version 3.5.2 (2018-12-20)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
Matrix products: default
locale:
[1] LC_COLLATE=Spanish_Chile.1252 LC_CTYPE=Spanish_Chile.1252 LC_MONETARY=Spanish_Chile.1252 LC_NUMERIC=C LC_TIME=Spanish_Chile.1252
Класс:
> class(x$PVS9)
[1] "character"
Кодирование:
> Encoding(x$PVS9)
[1] "unknown" "unknown" "unknown" "unknown"
> guess_encoding(x$PVS9)
# A tibble: 3 x 2
encoding confidence
<chr> <dbl>
1 ISO-8859-1 0.98
2 ISO-8859-2 0.88
3 ISO-8859-9 0.33
Также:
> x$PVS9 == y
[1] TRUE FALSE FALSE TRUE
Я думал решить эту смену кодировки вектора. Это возможно? Если нет, есть ли другой способ?
РЕДАКТИРОВАТЬ: Требуется дополнительная информация.
Что R думает, что это:
> sapply(x$PVS9, charToRaw)
$`De 1 a 2 semanas`
[1] 44 65 20 31 20 61 20 32 20 73 65 6d 61 6e 61 73
$`De 3 a 4 semanas`
[1] 44 65 20 33 a0 61 20 34 a0 73 65 6d 61 6e 61 73
$`Más de 6 semanas`
[1] 4d e1 73 20 64 65 20 36 a0 73 65 6d 61 6e 61 73
$`Menos de 1 semana`
[1] 4d 65 6e 6f 73 20 64 65 20 31 20 73 65 6d 61 6e 61