2017-06-13 83 views
-1

我有这样的URL列表:分割字符串或者

mydata <- read.table(header=TRUE, text=" 
     Id 
     https://www.example.com/dp/c/830216013?q=%3Arelevance%3Abrickpattern%3ADecorative%2FArt+Deco%3Abrickpattern%3AFloral%3Abrickpattern%3AGeometric%3Abrickpattern%3AGraphic%3Abrickpattern%3ATropical%3Aprice%3A300%2C10500&page=7&gridValue=4 
     https://www.example.com/dp/c/830216013?q=%3Arelevance%3Averticalsizegroupformat%3AIN%2040%3Averticalcolorfamily%3ABlack%3Averticalcolorfamily%3ABlue%3Averticalcolorfamily%3AWhite 
     https://www.example.com/dp/c/830316016?q=%3Arelevance%3Averticalcolorfamily%3AWhite&gclid=CjwKEAjw9_jJBRCXycSarr3csWcSJABthk07W_H0RxQtOPZX7VdD9CSmK4S01BMYdXbtc0XxC0OeChoCky_w_wcB 
     https://www.example.com/dp/c/830216013?q=%3Arelevance%3Abrand%3AFLYING%20MACHINE%3Abrand%3AMUFTI%3Abrand%3AUNITED%20COLORS%20OF%20BENETTON 
     https://www.example.com/dp/c/830216013?q=%3Arelevance%3Averticalsizegroupformat%3AIN%2038%3Averticalsizegroupformat%3AIN%2039%3Averticalsizegroupformat%3AIN%20M%3Averticalsizegroupformat%3AUK%2039%3Averticalsizegroupformat%3AUK%20M%3Averticalsizegroupformat%3AUK%20S%3Averticalsizegroupformat%3AUS%20M%3Averticalsizegroupformat%3AUS%20S%3Abrickpattern%3ASolid%3Averticalcolorfamily%3ABlack%3Averticalcolorfamily%3AWhite 
     https://www.example.com/dp/c/830216013?q=%3Aprce-asc%3Abricksleeve%3AShort%3Aprice%3A300%2C10500&page=2&gridValue=4 
     https://www.example.com/dp/c/830216013??q=%3Aprce-asc%3Abrand%3AUS+POLO%3Abricksleeve%3AShort%3Aprice%3A300%2C10500 
     https://www.example.com/dp/c/830216013?q=%3Arelevance%3Abrand%3AAJIO%3Abrand%3ABASICS%3Abrand%3ACelio%3Abrand%3ADNMX%3Abrand%3AGAS%3Abrand%3ALEVIS%3Abrand%3ANETPLAY%3Abrand%3ASIN%3Abrand%3ASUPERDRY%3Abrand%3AUS%20POLO%3Abrand%3AVIMAL%3Abrand%3AVIMAL%20APPARELS%3Abrand%3AVOI%20JEANS 
     https://www.example.com/dp/c/830216013?q=%3Arelevance%3Abrand%3ABritish+Club%3Abrand%3ACelio%3Abrand%3AFLYING+MACHINE%3Aprice%3A300%2C10500&page=1&gridValue=4   
         ")  

我需要拉出的参数值,喜欢的品牌,verticalcolorfamily,Q =从等的URL。这些参数是在网站上应用的过滤器。
我在寻找的输出是一个有三列的数据框架:参数,值和值的出现频率。对于实施例:

parameter |  value  | frequency 
----------|----------------|---------- 
brand  | FLYING+MACHINE | 2 
q=  | relevance  | 5 
price  | 300%2C10500 | 2 
brand  | BASICS   | 1 

目前我能够想到的是收集每个网址如由交替的“%3A”的值作为一个分隔符分隔的字符串载体:[Q =%3Arelevance,brickpattern%3ADecorative%2FArt + Deco,brickpattern%3AFloral,brickpattern%3AGeometric,brickpattern%3AGraphic,brickpattern%3atropical,价格%3A300%2C10500]。

然后将每个元素在数据帧中的一列,然后再次通过“%3A”分开并通过做的基团。 其他方法的建议将非常感激。 另外,如果我应该使用这种方法,我不知道使用交替'%3A'作为分隔符的方法。

+0

不清楚你如何让你的输出 – Sotos

+0

@Sotos每个URL从“Q =”开始采取对通过“%3A”分隔数据的第一个数据是第二数据是值的参数。 –

+0

请看看[urltools(https://cran.r-project.org/web/packages/urltools/vignettes/urltools.html),它可能包含你正在试图达到的目标。 – sebastianmm

回答

1

urltools看起来像一个真棒包你想要做什么。与此同时,这是一个黑客入侵的答案。

# Convert to character list 
# Get rid of url 
# Split by "%3A" and convert to "long" list 
L <- as.character(mydata$Id) 
L <- gsub("https://www.example.com/dp/c/830216013\\?", "", L) 
L <- unlist(strsplit(L, "%3A")) 

head(L) 
[1] "q="     "relevance"    "brickpattern"   
[4] "Decorative%2FArt+Deco" "brickpattern"   "Floral" 

然后:你data.frame开始

# Convert to 2-column data frame 
# Count unique parameter:value pairs 
df <- data.frame(parameter = L[seq(1,length(L),2)], value = L[seq(2,length(L),2)]) %>% 
     group_by(parameter, value) %>% 
     summarize(frequency=sum(!is.na(value))) 

我将只显示以下条目,其中frequency >= 2

# Show only entries with frequency >= 2 
filter(df, frequency >= 2) 

      parameter  value frequency 
       <fctr> <fctr>  <int> 
1    brand  Celio   2 
2   bricksleeve  Short   2 
3     q= relevance   6 
4 verticalcolorfamily  Black   2 
5 verticalcolorfamily  White   2 

注意brand::FLYING+MACHINE != 2因为FLYING+MACHINE发生是由于FLYING%20MACHINEFLYING+MACHINE

+0

感谢您的回答。完成了工作。 –