2

少し前に R< を使い始めて以来、このサイトはスクリプトの作成に非常に役立つことがわかりました。どこにも答えが見つからないように見える課題にまた出くわしました。ここに私の問題があります: 私のデータには、各行に異なる URL を含む列があります。これらの URL のそれぞれに、抽出したい特定の情報があります。Rでは不可能であり、それを行う機能が存在しないと言われたので、現在私はExcelでそれを行っています。

URL はこの例の形式のようになり、「ソース」列に表示されます。

http://www.googleclick.com?utm_source=ADX&ID56789

http://www.googleclick.com?utm_source=ADW&ID56009

http://www.googleclick.com?utm_source=ADWords&ID53389

私にとって重要な URL の部分は、「utm_source=ADX」ビットです。私のデータは次のようになります。

ユーザー/ソース

1 / http://www.googleclick.com?utm_source=ADX&ID56789

2 / http://www.googleclick.com?utm_source=ADW&ID56009

3 / http://www.googleclick.com?utm_source=ADWords&ID53389

私がする必要があるのは、URL から utm_source を取得し、情報を別の列に転置することです。以下の例を参照してください。

ユーザー / ソース / utm_source

1 / グーグルクリック / ADX&ID56789

2 / グーグルクリック / ADW&ID56009

3 / グーグルクリック / ADWords&ID53389

したがって、本質的には、データフレーム全体で値「utm_source =」を検索するためにRが必要であり、それらが見つかったら、「utm_source =」値を列名に転置し、その後に続くすべての情報をコピーする必要があります個々の行ごとにその列の「=」。「grep」は、 datafreme 内の特定の情報を見つける関数であることを知っています。たとえば、 data <- total[grepl("utm_source", total$Source), ]. これにより、「utm_source」という単語を含むすべての行が得られますが、必要なのは「utm_source」の後に続く情報です。通常、私のデータには 500.000 行もある場合があります。現時点では、これに「テキストから列へ」というExcel関数を使用しています。基本的に、URLを少しずつ分割し、必要な列を保持しています。

必要な基準を満たすようにgrepl関数を変更する方法はありますか?

4

2 に答える 2

4

不可能はない。

x <- read.csv(text="
User, Source
1, http://www.googleclick.com?utm_source=ADX&ID56789
2, http://www.googleclick.com?utm_source=ADW&ID56009
3, http://www.googleclick.com?utm_source=ADWords&ID53389
", header=TRUE, stringsAsFactors=FALSE)

まず、使用しますstrsplit

strsplit(x$Source, split="\\?utm_source=")
[[1]]
[1] " http://www.googleclick.com" "ADX&ID56789"                

[[2]]
[1] " http://www.googleclick.com" "ADW&ID56009"                

[[3]]
[1] " http://www.googleclick.com" "ADWords&ID53389" 

次に、真っ赤なポーカーを見つけて、いわゆるアドバイザーの目に固執します。


編集:

Paul Hiemstra が提案したように、正規表現を直接使用することもできます。

gsub(".*\\?utm_source=", "", x$Source)
[1] "ADX&ID56789"     "ADW&ID56009"     "ADWords&ID53389"
于 2012-11-19T15:18:43.317 に答える
1

@Andrieの答えはトリックを行います。これがusingを使用する別の方法でregmatchesあり、gregexprそれは役に立つかもしれません。

d <- read.table(text="User URL
1 http://www.googleclick.com?utm_source=ADX&ID56789
2 http://www.googleclick.com?utm_source=ADW&ID56009
3 http://www.googleclick.com?utm_source=ADWords&ID53389", header=TRUE)

domain.pat <- '((?<=www.)([[:alnum:]_]+))'
source.pat <- '((?<=utm_source=)([[:alnum:]&]+))' # exclude the '&' here to only grab up to the '&'
all.matches <- gregexpr(paste(domain.pat, source.pat, sep='|'), d$URL, perl=TRUE)
all.substrings <- regmatches(d$URL, all.matches)
do.call(rbind, all.substrings)

#      [,1]          [,2]             
# [1,] "googleclick" "ADX&ID56789"    
# [2,] "googleclick" "ADW&ID56009"    
# [3,] "googleclick" "ADWords&ID53389"
于 2012-11-19T16:04:54.750 に答える