Я хотел бы преобразовать десятичные координаты (например, -62,54879632547) до фиксированных строк ширины следующего образом:Преобразования десятичного числа с отрицательным знаком с фиксированной шириной строки
отрицательного числа -> ведущий 0
положительного числа -> ведущий 1
затем 3 цифры для целой части
62 -> 062
2 -> 002
Затем 6 цифр после запятой (и удаления десятичной)
.54879632547 -> 548796
Заключительных restuls:
-62,54879632547 -> 0062548796 (т.е. 0 062 548796)
Как сделать это быстро и эффективно в R?
Я сделал следующую функцию, но она довольно медленно (при использовании с lapply над миллионами значений):
formatCoordinate <- function (x) {
if (!is.na(x)) {
sign <- ifelse(x < 0, 0, 1)
castIntergerPart <- function (x) {
#integer part should be exactly 3 digits with leading zeros if necessary
if (abs(x) < 10) {
intgerPart <- paste0("00", abs(as.integer(x)))
}else if (abs(x) >=10 & abs(x) < 100) {
intgerPart <- paste0("0", abs(as.integer(x)))
}else if (abs(x) >= 100) {
intgerPart <- paste0(abs(as.integer(x)))
}
}
castDecimalPart <- function(x) {
s <- toString(x)
sub(".*?.(.*?);.*", "\\1", s)
substr(unlist(strsplit(s, split='.', fixed=TRUE))[2], 1, 6)
}
formattedCoordinate = paste0(sign, castIntergerPart(x), castDecimalPart(x))
}else{
NA
}
}
любой помощь ценится
лучшего
Большое спасибо Heroka! Ваш код на 2 раза быстрее. Как вы думаете, я могу использовать mclappy? Я попробовал следующее, и это не сработало: x1 <- runif (1000000, 5.0, 7.5). T <- mclapply (x1, formatter, m.cores = 4) Предупреждающее сообщение: все запланированные ядра обнаружили ошибки в код пользователя – user22364
Я не знаком с mclappy. Тем не менее, форматирование (x1) выполнялось через 7 секунд на моей машине. Не уверен, что это слишком медленно для вас (я часто трачу больше времени на оптимизацию кода, чем на выигранное время) – Heroka
Еще раз спасибо, я использовал apply (x1), потому что мой код основан на одном значении, но с использованием formatter (x1) без lapply на 13 раз быстрее, чем мой код, что отлично! – user22364