如何将列从英尺和英寸(X'X)转换为米?

问题描述 投票:-1回答:1

我是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'86'8 4'2 6'11 6'11 4'8 6'11 6'1 4'9 5'9 4'8 6'11 6'75'8 4'10 5'1 6'3 5'3 6'6 4'9 5'5 4'1 4'7 4'4 4'4

谢谢。

r units-of-measurement
1个回答
0
投票

这是一个快速功能:

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)并查看[-C0]之后每个向量的值,您会发现s2正在确保我们具有格式正确的字符串。

gsub

我正在“捕获”仅英尺,仅英寸或没有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英寸以上的无意义的问题。它还将允许十进制英尺英寸(十进制或其他形式),但是如果我们将其定义为“某个数字,一个",另一个数字和一个'”,这仍然是合法的,但仍然合法。

© www.soinside.com 2019 - 2024. All rights reserved.