我们有一个数据集,其中包含限制在特定范围内的数值。当值超出该范围时,它们将简化为"<75"
和">1200"
。
我们希望以自动方式将这些值更改为最大值或最小值。因此,1200
应该变为"<75"
而75
应变为[153] 240 645 85 235 >1200 715 235 150
:
*.html
答案 0 :(得分:3)
我们可以使用gsub
来匹配<
或>
的一个或多个实例,替换为空白""
并转换为数字。
as.numeric(gsub("[<>]+", "", v1))
#[1] 240 645 85 235 1200 715 235 150 75
如果只有一个实例,我们也可以使用sub
v1 <- c(240, 645, 85, 235, '>1200', 715, 235, 150, '<75')
答案 1 :(得分:3)
我个人喜欢依赖尽可能多的包裹,因为我是一个受虐狂,所以如果我是你,我会使用readr::parse_number()
:
> readr::parse_number(v1)
[1] 240 645 85 235 1200 715 235 150
答案 2 :(得分:0)
或者我们可以从矢量中提取所有数字并将其转换为数字
as.numeric(regmatches(x, gregexpr("[[:digit:]]+", x)))
#[1] 240 645 85 235 1200 715 235 150
或我们也可以使用extract_numeric
包
tidyr
library(tidyr)
extract_numeric(x)
#[1] 240 645 85 235 1200 715 235 150
答案 3 :(得分:0)
使用str_extract
中的stringr
:
library(stringr)
as.numeric(str_extract(x, '\\d+'))
# [1] 240 645 85 235 1200 715 235 150 75
数据(来自@akrun):
x <- c(240, 645, 85, 235, '>1200', 715, 235, 150, '<75')