1

私のデータ セットには、"JE.Description" と "Field.Description" という名前の似た 2 つの変数があります。「JE.Description」列の列インデックスをターゲットにして、「Field」という単語を正規表現検索から除外するにはどうすればよいですか? つまり、以下のコマンドを変更して、「JE.Description」の列インデックスのみを返すようにします。

データ セットは頻繁に更新され、"JE.Description" 文字列が "Description" として表示されることがあります。そのため、キーワード「フィールド」を明示的に除外する解決策を探しています。

r1 <- c(1:5)
r2 <- c(1:5)
df <- data.frame(r1,r2)
names(df)[1] <- "JE.Description"
names(df)[2] <- "Field.Description"

y <- grep("!^Field^Description",perl = TRUE, colnames(df))
RETURNS: integer[0]

ありがとう、

4

2 に答える 2

6

が直前にあるものを"Description" 除いて、を含むすべての文字列に一致させる"Field."には、否定後読みアサーションを使用します。

## The regex pattern
pat <- "(?<!Field\\.)Description"

## Try it out
x <- c("Description", "Field.Description", "FieldDescription", "xyz Description")
grep(pat, x, perl=TRUE)  # Note: lookahead & lookbehind assertions need perl=TRUE
# [1] 1 3 4

あるいは、部分文字列"field"が , に関連する他の位置に発生する可能性がある場合"Description"(およびおそらく大文字または小文字のバージョンのいずれか)、単純にgrepl()2 回実行し、ブール演算子を使用して結果を結合することができます。

x <- c("Description", "fieldDescription", "Field-of-Description", 
       "Description field")
which(grepl("Description", x) & !grepl("field", x, ignore.case=TRUE))
[1] 1
于 2013-10-14T20:12:22.393 に答える
0
mydata<-structure(list(Description = c(21, 21, 22.8, 21.4, 18.7, 18.1, 
14.3, 24.4, 22.8, 19.2), Field.Description = c(6, 6, 4, 6, 8, 
6, 8, 4, 4, 6)), .Names = c("Description", "Field.Description"
), row.names = c("Mazda RX4", "Mazda RX4 Wag", "Datsun 710", 
"Hornet 4 Drive", "Hornet Sportabout", "Valiant", "Duster 360", 
"Merc 240D", "Merc 230", "Merc 280"), class = "data.frame")

mydata[grep("^Description",names(mydata))]
                  Description
Mazda RX4                21.0
Mazda RX4 Wag            21.0
Datsun 710               22.8
Hornet 4 Drive           21.4
Hornet Sportabout        18.7
Valiant                  18.1
Duster 360               14.3
Merc 240D                24.4
Merc 230                 22.8
Merc 280                 19.2
于 2013-10-14T20:18:43.380 に答える