2017-10-04 4 views
0

URLクエリの文字列を解析するにはどうすればよいでしょうか。 Rでこれを行う簡単な方法はありますか?多分図書館で?URLクエリのキーと値のペアをデータフレームに変換する

入力:

unique1=blub&same=aaaa-aaaa-aaaa&date=01.01.2017&time=12:30:00 
date=02.01.2017&unique2=blub&time=12:30:00&same=bbbb-bbbb 
same=cccc&time=12:35:00&unique3=blub&date=03.01.2017` 

data.frameとして所望の出力:

 date   same  time unique1 unique2 unique3 
1 01.01.2017 aaaa-aaaa-aaaa 12:30:00 blub <NA> <NA> 
2 02.01.2017  bbbb-bbbb 12:30:00 <NA> blub <NA> 
3 03.01.2017   cccc 12:35:00 <NA> <NA> blub 

答えて

1

ここでは一つの方法です。フィールドは「&」で分割され、「キー値」は「=」で分割されます。次に、strsplitを使用して、各行のリストを生成し、両方の文字を使用して分割します。 2行目では、データの規則性を利用して、係数2を使用してキーと値を区切ります。私たちは、これが

dat 
    unique1   same  date  time unique2 unique3 
1: blub aaaa-aaaa-aaaa 01.01.2017 12:30:00  NA  NA 
2:  NA  bbbb-bbbb 02.01.2017 12:30:00 blub  NA 
3:  NA   cccc 03.01.2017 12:35:00  NA blub 

列は順不同であるが、これは修正するのは簡単ですが返されますdata.table

# get list of key-values by line 
tmp <- strsplit(urlDat, "&|=") 
# use modulus to select keys and values 
tmp <- lapply(tmp, function(x) setNames(as.list(x[seq_along(x) %% 2 == 0L]), 
             x[seq_along(x) %% 2 == 1L])) 
library(data.table) 
dat <- rbindlist(tmp, fill=TRUE, use.names=TRUE) 

を返すためにdata.tablerbindlistにそれを養うことができるようにこれは、ネストされたリストを返します。標準の索引付けでは[です。

setDF(dat)[, c("date", "same", "time", "unique1", "unique2", "unique3")] 
     date   same  time unique1 unique2 unique3 
1 01.01.2017 aaaa-aaaa-aaaa 12:30:00 blub <NA> <NA> 
2 02.01.2017  bbbb-bbbb 12:30:00 <NA> blub <NA> 
3 03.01.2017   cccc 12:35:00 <NA> <NA> blub 

setDFここで、setDFは、データを所定の場所(コピーなし)のdata.frameに強制します。

データ

urlDat <- readLines(textConnection(
"unique1=blub&same=aaaa-aaaa-aaaa&date=01.01.2017&time=12:30:00 
date=02.01.2017&unique2=blub&time=12:30:00&same=bbbb-bbbb 
same=cccc&time=12:35:00&unique3=blub&date=03.01.2017")) 
関連する問題