我有一个包含描述距离的数据的向量,除了单位在米和英尺之间混合,偶尔包含使用各种不同分隔符分隔的两个单位。我想要做的是提取值并将其转换为米。例如,如果向量的元素是" 100 m"然后我想把它提取为" 100",如果它" 600英尺"然后将其提取到" 182.4"。我正在考虑的方法是识别包含" m"的向量的所有元素。或"米"并在这些情况下提取数值。如果它包含"脚"或其中任何一个版本,提取数字并将其转换为米。当它出现在像#137; 137米(户外)这样的字符串中时,它应该不那么清楚; 46米(室内)",或者#34;户外最高450英尺/ 137米;高达150英尺/ 46米室内"。一个理想的解决方案是以米为单位抓住距离,然后排除其他值。
在这些情况下,我认为尝试提出一个正则表达式来抓取指定单位之前的数字是有用的,但我正在努力解决这个问题。到目前为止,我试图用来实现这一目标的方法是零碎的 - 首先抓住满足" m"标准,那么" m"等;但我希望用正则表达式更容易实现这一点,但我不知道如何做到这一点。如果有人能提供一些建议我会非常感激。数据粘贴在下面。
c("", "100 m", "", "", "200 m", "", "", "1000 m", "1400 m", "1400 m",
"", "", "0", "230 m", "", "", "", "106.7 m", "", "", "", "300 m",
"300 m", "250 m", "250 m", "250 m", "", "", "", "656 feet", "",
"", "600 Feet", "", "500 Feet", "", "600 Feet", "180.8 m", "152.4 m",
"Not Applicable", "152 m", "500 Feet", "228.6 m", "228.6 m",
"228.6 m", "152 m", "152 m", "152 m", "152.4 m", "", "152.4 m",
"152.4 m", "600 Feet", "137.2 m", "", "", "", "", "", "", "",
"304.8 m", "304.8 m", "304.8 m", "600 Feet", "400 Feet", "228.6 m",
"228.6 m", "Up to 590 ft", "200 m", "300 m", "100 m", "Not Applicable",
"228.6 m", "182.88 m", "182.88 m", "250 m", "750", "250", "150 m",
"", "", "304.8 m", "152.4 m", "228.6 m", "152.4 m", "228.6 m",
"228.6 m", "228.6 m", "138 m", "150 m", "", "", "", "228.6 m",
"228.6 m", "", "228.6 m", "Not Applicable", "Not Applicable",
"228.6 m", "137 m (Outdoors); 46 m (Indoors)", "Up to 450 ft / 137 m Outdoors; Up to 150 ft / 46 m Indoors",
"150 m", "", "304 m", "100 m", "", "150 m", "137.2 m", "300 m",
"182.9 m", "", "183 m", "300 m", "Up to 1000 ft", "600-feet / 182.88 m ",
"400 ft; 121.92 m", "150 m", "300m", "300m", "", "300m", "300m",
"", "300m", "", "300m", "300 m", "50 m", "250", "250", "250",
"250", "250 m", "250 m", "200 m", "Not Applicable", "118 m",
"50 m", "50 m", "304.8", "300 m", "244 m", "244 m", "244 m",
"198.1 m", "198.1 m", "600-feet/182.88m", "600-feet/182.88m",
"", "182.9 m", "182.9 m", "182.9 m", "182.9 m", "300 m", "180 m",
"152.4 m", "182.9 m", "", "", "30.5 m", "30.5 m", "30.5 m", "304.8 m",
"304.8 m", "304.8 m", "300 m", "50-300 meters", "50 - 300 m",
"50-300 meters", "50-300 meters", "50-300 meters", "", "300 m",
"158.5 m", "", "274.3 m", "", "", "182.9 m", "182.9 m", "300 m",
"", "", "300 m", "", "300 m", "152.4 m", "200 m", "300 m", "152.4 m",
"152.4 m", "152.4 m", "", "300 m", "300 m", "", "", "", "")
答案 0 :(得分:0)
使用stringr
包
stringr::str_extract(x, "[0-9]+\\.[0-9]+|[0-9]+(?=\\s+m|\\s+(f|F)eet|\\s+ft)")
(?=)
代表前面。其余部分是使用OR语句来查找不同的类型。