0

少し似たデータフレームがあります

uniqueID <- sample(1:10, 3, replace=F)
faultDetails <- c("fault is blah blah blah and serial is F1AB3CDE123", "Serial No: f1ds6hrc813, fault is blah blah blah", "fault: blah blah blah serial number: F2GE8FDW159")
myData <- cbind.data.frame(uniqueID, faultDetails)

各エントリからシリアル番号を抽出して新しい変数に格納する必要がありますが、フィールド内の位置は固定されていません。唯一の定数は、シリアル番号が F、数字、文字、文字、数字、文字、文字、文字、数字、数字、数字の形式であることです。また、テキストの大文字と小文字はエントリごとに変わります (フリーテキストの喜びです!)。

これを dplyr パイプラインの一部として実行したいと思います。どんな助けでも大歓迎です。

4

1 に答える 1

2

大文字と小文字は、正しい正規表現ではあまり問題になりません。私は次のようにアプローチします:

library(dplyr)
library(stringr)

uniqueID <- sample(1:10, 3, replace=F)
faultDetails <- c("fault is blah blah blah and serial is F1AB3CDE123", "Serial No: f1ds6hrc813, fault is blah blah blah", "fault: blah blah blah serial number: F2GE8FDW159")
myData <- cbind.data.frame(uniqueID, faultDetails) %>%
  mutate(serial_number = str_extract(faultDetails,
                                     "(F|f)\\d{1}\\w{2}\\d{1}\\w{3}\\d{3}"))

myData

  uniqueID                                      faultDetails serial_number
1        7 fault is blah blah blah and serial is F1AB3CDE123   F1AB3CDE123
2        9   Serial No: f1ds6hrc813, fault is blah blah blah   f1ds6hrc813
3        3  fault: blah blah blah serial number: F2GE8FDW159   F2GE8FDW159

メタ\w文字は「単語文字」を探します。ここでは、文字を探すのに役立ちます (ただし、アンダースコアも検出します)。この\w{2}表記は、そのような 2 つの文字のシーケンスが必要であることを意味します。メタ\d文字は数字を検索します。中括弧内の数字は検索するシーケンスの長さです。

で始まる正規表現は、または(F|f)で始まる可能性があることを意味します。Ff

于 2016-08-24T13:15:31.490 に答える