0

以下のコードがあります。英数字の値を持つセルを見つけたいのですが、na または NA のセルも無視する必要があります。

コードをそれに変更するにはどうすればよいですか? 必要な R コマンドは、newcolumn の以下の結果を返す必要があります

真、真、偽、偽、真、偽、偽

コマンド 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" "" "*"

===========================アップデート1===================== =========

newcolumn2<-newcolumn[grepl("(?=(?i)na(N)?(*SKIP)(*F))|[[:alnum:]]|(?=(?i)nan(*SKIP)(*F))|(?=(?i)null(*SKIP)(*F))", newcolumn, perl=TRUE)]

na、nan、null、およびそれらのバリアントも認識したいので、上記のようにコードを更新しました。しかし、「null部分が機能していません。どのような変更を加える必要がありますか?

4

1 に答える 1

1

試す:

 grepl("(?=(?i)na(*SKIP)(*F))|[[:alnum:]]", newcolumn, perl=TRUE)
 #[1]  TRUE  TRUE FALSE FALSE  TRUE FALSE FALSE

(?i)大文字と小文字を区別しないことを意味します。したがって、 、 、 、または と一致する必要naNAあり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 FALSE
于 2014-10-06T18:44:00.233 に答える