1

サンプルデータ

A<-c(1,4,5,6)
B<-c(4,6,7,8)
C<-c(6,9,1,2)
D<-c(5,6,7,3)
E<-c(10,11,12,19)
DF<-data.frame(A,B,C,D,E)

colnames(DF)<-c("A_1","B_1","C_2","D_2","TEST")


One<-1
Two<-2

grep を使用して、最後の列で見つかった条件に基づいてデータを削除 (NA にする) したいと考えています。

DF[DF$TEST>15,grep(Two,colnames(DF))]<-NA

うまく動作します

DF[DF$TEST>15,grep(Two|One,colnames(DF))]<-NA

ではない

そして、数値データが若干異なる場合に備えて

DF[DF$TEST>15,grep(2,colnames(DF))]<-NA

これはうまくいきます

DF[DF$TEST>15,grep(2|1,colnames(DF))]<-NA

これはしません

理想的には、定義ごとにいくつかの変数に基づいて grep を使用してデータをドロップできるようにしたいと考えています。

grep(One|Two|Three|Four)

または数字を扱う場合

 grep(1:4)

そして、正規表現で加算を回避できるかどうかはわかりませんが、最終的にはこれができれば最も簡単です。

DF[DF$TEST>15,grep(One+1,colnames(DF))]<-NA   #If I were trying to grep on 2

また

DF[DF$TEST>15,grep(One+1:One,colnames(DF))]<-NA   #If I were trying to grep on 1:2
4

2 に答える 2

3

変数名から正規表現パターンを作成する必要があります。

何かのようなもの

or <- function(...) paste0('(', paste(..., sep = '|'), ')')
or(One,Two)
## [1]  '(1|2)'
grep(or(One,Two), colnames(DF))
于 2013-03-21T00:47:38.323 に答える
2

sapplyラップで使ってみてくださいc

  c(sapply(One:Two, grep, colnames(DF))

必要に応じてラップすることuniqueもできます。

--

関数内の引数の順序grep(関数ではなくstringr) は、非常にきちんとした *apply 呼び出しを行うことがわかりました。

于 2013-03-21T00:48:54.033 に答える