Найдите десятичное число, даже если все после десятичного числа равен нулю - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь найти местоположение десятичной точки, если она существует и даже если все после десятичной дроби - ноль.

Этот тип вопросов возникал много раз, но я не видел ничего, что объясняет фактическое форматирование.

Сценарий: электронная таблица Excel была прочитана в R. Все числа, которые имеют более чемнеобходимо указать определенное количество десятичных знаков.Мой вектор содержит около 1000 записей.

string = as.character(c(123, 0.123, 123.00000, 123.0, 123., 123.4567,  123.456789))
pattern = '\\.'
library(stringi)`

Это НЕ то, что я хочу

str_locate(string = string, pattern = pattern)[1:length(string), 1]
#[1] NA  2 NA NA NA  4  4

Я хочу

#[1] NA 2 4 4 4 4 4

Если я изменю строку на

string = c('123', '0.123', '123.00000', '123.0', '123.', '123.4567', '123.456789')

Тогда я получу правильный ответ с

str_locate(string = string, pattern = pattern)[1:length(string), 1]
#[1] NA  2  4  4  4  4  4

1 Ответ

0 голосов
/ 29 января 2019

Вам нужно сначала прочитать числа в R как строки, используя опцию colClasses = "character" для read.csv.(См. Документацию здесь и здесь .) Если вы прочитаете их как числа, а затем преобразуете их в строки, 123.000 преобразуется в «123», и вы потеряете информацию, которую ищете.

Пояснение

При выполнении

string = as.character(c(123.000))

, что происходит, 123.000 интерпретируется как числовой литерал и сохраняется как число123.Когда вы конвертируете число в строку с as.character, вы получите "123".Вы увидите это, если напечатаете string.Поэтому, конечно, вы не увидите десятичную точку при поиске строки, потому что она была потеряна в преобразованиях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...