我有一个数据框,其中有两列主要是数值,但也有一些值记录为>
或<
,例如>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
。这很好,但看起来很笨拙。
任何帮助将不胜感激。 此致
答案 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