Как перевести колонку из футов и дюймов (X'X) в метры? - PullRequest
0 голосов
/ 06 апреля 2020

Я новичок в R. У меня есть столбец высот, отформатированный как X'X (футы и дюймы). Я хочу преобразовать это в метры. У кого-нибудь есть идеи?

Данные:

Высота
4'1 6'7 6'8 5'11 5'9 6'5 4'5 6'1 4'4 4 ' 5 6'11 6'8 6'8 4'2 6'11 6'11 4'8 6'11 6'1 4'9 5'9 4'8 6'11 6'7 5'8 4'10 5 '1 6'3 5'3 6'6 4'9 5'5 4'1 4'7 4'4 4'4

Спасибо.

1 Ответ

0 голосов
/ 06 апреля 2020

Вот быстрая функция:

ft2m <- function(s) {
  # add inches if missing or no-quotes; adding extraneous leading zeroes is okay
  s1 <- gsub("'([0-9.]*)$", "'0\\1\"", s)
  s2 <- gsub("^([0-9.]+)\"?$", "0'\\1\"", s1)
  gre <- gregexpr("([0-9.]+)(?=')", s2, perl = TRUE)
  feet <- as.numeric(regmatches(s2, gre))
  gre <- gregexpr("(?<=')([0-9.]+)(?=\")", s2, perl = TRUE)
  inch <- as.numeric(regmatches(s2, gre))
  0.3048 * (feet + inch/12)
}

Демо:

vec <- c("5'10", "3'10\"", "0'9.3\"", "2'", "2'0", "2'0\"", "10\"")
ft2m(vec)
# [1] 1.77800 1.16840 0.23622 0.60960 0.60960 0.60960 0.25400

Объяснение:

Если вы debug(ft2m) и посмотрите на значения каждого вектора поста - s2, вы увидите, что gsub s проверяет, что у нас есть хорошо отформатированные строки.

cbind(s, s1, s2)
#      s         s1        s2       
# [1,] "5'10"    "5'010\"" "5'010\""
# [2,] "3'10\""  "3'10\""  "3'10\"" 
# [3,] "0'9.3\"" "0'9.3\"" "0'9.3\""
# [4,] "2'"      "2'0\""   "2'0\""  
# [5,] "2'0"     "2'00\""  "2'00\"" 
# [6,] "2'0\""   "2'0\""   "2'0\""  
# [7,] "10\""    "10\""    "0'10\"" 

Я "ловлю" строки, которые являются только футами, только дюймами или дюймов без ". Он не улавливает такие бессмысленные проблемы, как более 12 дюймов. Это также позволит использовать десятичные футы и дюймы (десятичные или иные), что, тем не менее, остается неясным, если мы определим это как «некоторое число, ', другое число и "».

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