如何使用Regex选择多个列

时间:2015-05-07 21:14:33

标签: regex r

我有一个数据框,其中有两列主要是数值,但也有一些值记录为><,例如>10000等。

我需要过滤数据,以便可以评估数据,当这些值只在一列中时,以下工作正常。

x_clean = x[!grepl('[^0-9]', x[[2]]),]

我首先想到所有这些事件都会涉及两个列,只需要使用col2,但我发现有时我在col2中得到一个数值,但在{{</>中得到col3 1}}

使用以下内容为我留下了一个完全空白的数据框。

x_clean = x[!grepl('[^0-9]', x[2:3]),]

我认为这是因为[[]]将col转换为列表,然后grepl不满意。

如果有人能提供一些帮助,我将不胜感激。目前,我再次重复评估,将2替换为3。这很好,但看起来很笨拙。

任何帮助将不胜感激。 此致

2 个答案:

答案 0 :(得分:0)

你想要

self.env.loader = ChoiceLoader([
            PackageLoader('my_assets', 'templates'),
            FileSystemLoader(self._templates_path),
            simple_loader,
            PrefixLoader({'!simple': simple_loader})
            ])

因为grep只返回正则表达式的评估 对于data.frame中每个字段的第一个值,请参阅:

grepl('[^0-9]', x[[2]]) & grepl('[^0-9]', x[[3]])

或者如果您想要在必要时编写不同的代码 使用grepl在行上的条件你可以做这样的事情:

x = data.frame(a = c(1,2,'>3'),b=c(1,'<2',3),c = c(1,'<2','>3'))
x
#>    a  b  c
#> 1  1  1  1
#> 2  2 <2 <2
#> 3 >3  3 >3

grepl('[^0-9]', x[2:3])
#> [1] TRUE TRUE

答案 1 :(得分:0)

我认为你可以转换为数字;任何无法转换的条目都将变为NA,并且可以过滤掉。此外,如果您正在进行任何后续分析,您将需要数字格式的数据。

x[] <- lapply(x,function(x)as.numeric(as.character(x)))
na.omit(x)

示例:

x <- data.frame(x1=c(1,">1",2),x2=c(">1",2,3))
#   x1 x2
# 1  1 >1
# 2 >1  2
# 3  2  3

x[] <- lapply(x,function(x)as.numeric(as.character(x)))
na.omit(x)
#   x1 x2
# 3  2  3