簡體   English   中英

R:從KeyValue列表中提取不同的模式

[英]R: Extract distinct pattern from KeyValue list

我有一個類似於的數據集:

quest<-data.frame(city=c("Atlanta","New York","Atlanta","Tampa"), key_value=c("rev=63;code=ATL;qty=1;zip=45987","rev=10.60|34;qty=1|2;zip=12686|12694;code=NY","code=ATL;rev=12;qty=1;zip=74268","rev=3|24|8;qty=1|6|3;code=TPA;zip=33684|36842|30254"))

對應於:

    city                                           key_value
1  Atlanta                     rev=63;code=ATL;qty=1;zip=45987
2 New York        rev=10.60|34;qty=1|2;zip=12686|12694;code=NY
3  Atlanta                     code=ATL;rev=12;qty=1;zip=74268
4    Tampa rev=3|24|8;qty=1|6|3;code=TPA;zip=33684|36842|30254

我正在嘗試從看起來像下面的數據中僅提取鍵值模式(“代碼”)之一:

      city code
1  Atlanta  ATL
2 New York   NY
3  Atlanta  ATL
4    Tampa  TPA

我們可以使用正則表達式來使用Regex做到這一點

quest$code <- gsub(".*(?<=code=)(\\w+)(;|$).*", "\\1", quest$key_value, perl = TRUE)

.* -與我們的后代相匹配

(?<=code=) -匹配字符串中前面的字符為“ code =“的位置

(\\\\w+) -匹配代碼並將其捕獲到第一組中。

(;|$) -匹配分號或字符串的末尾(對於NY,此后沒有分號)

.* -匹配字符串的其余部分

      city                                           key_value code
1  Atlanta                     rev=63;code=ATL;qty=1;zip=45987  ATL
2 New York        rev=10.60|34;qty=1|2;zip=12686|12694;code=NY   NY
3  Atlanta                     code=ATL;rev=12;qty=1;zip=74268  ATL
4    Tampa rev=3|24|8;qty=1|6|3;code=TPA;zip=33684|36842|30254  TPA

現場例子

https://regex101.com/r/UM7Cim/4

您可以使用strcapture返回捕獲的正則表達式部分:

cbind(quest, 
   strcapture(
     "code=([^;]*)",
     quest$key_value,
     data.frame(code=character())))

regex "code=([^;]*)"查找文本code= ,然后捕獲所有不是分號的內容。 數據框參數指定返回值的名稱和類型。 在這里,我使用cbind返回帶有額外列的數據幀。

> cbind(quest, strcapture("code=([^;]*)",quest$key_value,data.frame(code=character())))
      city                                           key_value code
1  Atlanta                     rev=63;code=ATL;qty=1;zip=45987  ATL
2 New York        rev=10.60|34;qty=1|2;zip=12686|12694;code=NY   NY
3  Atlanta                     code=ATL;rev=12;qty=1;zip=74268  ATL
4    Tampa rev=3|24|8;qty=1|6|3;code=TPA;zip=33684|36842|30254  TPA

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM