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