我有以下代码。我希望找到具有字母数字值的单元格,它也应该忽略NA或na的单元格。
我如何修改我的代码呢?对于新列,所需的R命令应该返回下面的结果
真,真,假
我尝试了命令3和4,但是它们失败了:
> newcolumn=c(1,2,"na","NA","abc","","*")
> grepl("[[:alnum:]]", newcolumn)
[1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE
> grepl("[[:alnum:]] | na", newcolumn)
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> grepl(c("[[:alnum:]]","na"), newcolumn)
[1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE
Warning message:
In grepl(c("[[:alnum:]]", "na"), newcolumn) :
argument 'pattern' has length > 1 and only the first element will be used
> grepl("[[:alnum:]]" | "na" | "NA", newcolumn)
Error in "[[:alnum:]]" | "na" :
operations are possible only for numeric, logical or complex types
> str(newcolumn)
chr [1:7] "1" "2" "na" "NA" "abc" "" "*"===========================update1===============================
newcolumn2<-newcolumn[grepl("(?=(?i)na(N)?(*SKIP)(*F))|[[:alnum:]]|(?=(?i)nan(*SKIP)(*F))|(?=(?i)null(*SKIP)(*F))", newcolumn, perl=TRUE)]我更新了上面的代码,因为我想识别na、nan、null以及它们的变体。但是“空部分不起作用,我应该做什么改变呢?”
发布于 2014-10-06 18:44:00
尝试:
grepl("(?=(?i)na(*SKIP)(*F))|[[:alnum:]]", newcolumn, perl=TRUE)
#[1] TRUE TRUE FALSE FALSE TRUE FALSE FALSE(?i)的意思是不区分大小写.因此,它应该匹配na、NA、nA或Na。模式中的(*SKIP)(*F)使匹配失败。现在右边的图案是|符号。[[:alnum:]]将是匹配的。
更新
newcolumn <- c(1,2,"na","NA","abc","","*", "NaN", "nan", "nAn")
grepl("(?i)na(N)?(*SKIP)(*F)|[[:alnum:]]", newcolumn, perl=TRUE)
# [1] TRUE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSEhttps://stackoverflow.com/questions/26222561
复制相似问题