你想
grepl('[^0-9]', x[[2]]) & grepl('[^0-9]', x[[3]])
因爲grep的只返回從data.frame每個字段的第一個值的正則表達式 的計算結果爲,請參閱:
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
,或者你想不得不編寫不同的代碼,當你想在行上使用grepl時 條件,你可以這樣做:
temp <- lapply(x, function(x)grepl('[^0-9]',x))
temp
#> $a
#> [1] FALSE FALSE TRUE
#>
#> $b
#> [1] FALSE TRUE FALSE
#>
#> $c
#> [1] FALSE TRUE TRUE
# applies the or operator (|) across all the arguments
OR <- function (...)
{
argList <- list(...)
names(argList) <- NULL
switch(as.character(length(argList)),
`0` = NULL,
`1` = argList[[1]],
`2` = argList[[1]] | argList[[2]],
do.call("OR", c(list(argList[[1]] | argList[[2]]),
argList[-(1:2)])))
}
x_clean <- x[!do.call(OR,temp),]
你能發佈dput的'的輸出(頭(X,10))'' –
X [2:3]'是data.frame,同時'X [[2]]'是一個向量,而不是一個列表,fyi。目前還不清楚你想通過'!grepl'一次執行兩個列。這是「不是這些」還是「不是這兩個」? – Frank
謝謝弗蘭克。我需要刪除第2列和第3列中的非數字值。 –