[英]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
現場例子
您可以使用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.