5

前の質問から飛び越えて、特定の単語を分離するための適切な正規表現の構文に問題があります。

与えられたデータ フレーム:

DL<-c("Dark_ark","Light-Lis","dark7","DK_dark","The_light","Lights","Lig_dark","D_Light")
Col1<-c(1,12,3,6,4,8,2,8)
DF<-data.frame(Col1)
row.names(DF)<-DL

行名からすべての「ダーク」と「ライト」(大文字と小文字を無視) を抽出し、文字列「ダーク」または「ライト」のみを含む 2 番目の列を作成しようとしています。

Col2<-c("Dark","Light","dark","dark","light","Light","dark","Light")
DF$Col2<-Col2

          Col1  Col2
Dark_ark     1  Dark
Light-Lis   12 Light
dark7        3  dark
DK_dark      6  dark
The_light    4 light
Lights       8 Light
Lig_dark     2  dark
D_Light      8 Light

元のデータを少し変更して現在の問題を詳しく説明しましたが、Tyler Rinker からの優れた回答に基づいて、これを使用しました。

DF$Col2<-gsub("[^dark|light]", "", row.names(DF), ignore.case = TRUE)

しかし、gsub はいくつかの共通の文字でつまづいてしまいます。正規表現で正確な単語を分離するために掲示板を検索すると、答えはどちらかでダブルスラッシュを使用する必要があるようです

\\<light\\>

また

\\blight\\b

では、なぜ行は

DF$Col2<-gsub("[^\\<dark\\>|\\<light\\>]", "", row.names(DF), ignore.case = TRUE)

上記の目的の列をプルしませんか? 代わりに私は得る

          Col1    Col2
Dark_ark     1 Darkark
Light-Lis   12 LightLi
dark7        3    dark
DK_dark      6  DKdark
The_light    4 Thlight
Lights       8   Light
Lig_dark     2 Ligdark
D_Light      8  DLight
4

2 に答える 2

5

1 つのオプションは、stringrパッケージを使用することです。

library(stringr) 
str_extract(tolower(rownames(DF)),'dark|light')
[1] "dark"  "light" "dark"  "dark"  "light" "light" "dark"  "light"

または@Arunの提案を使用することをお勧めします:

str_extract(rownames(DF), ignore.case('dark|light'))
于 2013-07-28T23:52:07.350 に答える