0

質問のフォローアップデータフレームで一意の値を検索し、それらを使用してテーブルを作成する

ここに私のデータがどのように見えるかがあります

    UUID    Source
1   Jane    http//mywebsite.com44bb00?utm_source=ADW&utm_medium=banner&utm_campaign=Monk&gclid1234
2   Mike    http//mywebsite.com44bb00?utm_source=Google&utm_medium=cpc&utm_campaign=DOG&gclid1234
3   John    http//mywebsite.com44bb00?utm_source=Yahoo&utm_medium=banner&utm_campaign=DOG&gclid1234
4   Sarah   http//mywebsite.com44bb00?utm_source=Facebookdw&utm_medium=cpc&utm_campaign=CAT&gclid1234
5   Michael http//mywebsite.com44bb00?utm_source=Twitter&utm_medium=GDNr&utm_campaign=CAT&gclid1234
6   Bob     http//mywebsite.com44bb00?utm_source=ADW&utm_medium=GDN&utm_campaign=DOG&gclid1234
7   Mark    http//mywebsite.com44bb00?utm_source=Twitter&utm_medium=banner&utm_campaign=MONK&gclid1234
8   Anna    http//mywebsite.com44bb00?utm_source=Facebook&utm_medium=banner&utm_campaign=MONK&gclid1234

そして、ここに私が達成しようとしているものの望ましい出力があります

    NAME    UTM_SOURCE  UTM_MEDIUM  UTM_CAMPAIGN
1   Jane    ADW             banner     Monk
2   Mike    Google          cpc        DOG
3   John    Yahoo           banner     DOG
4   Sarah   Faceboo         cpc        CAT
5   Michael Twitter         GDN        CAT
6   Bob     ADW             GDN        DOG
7   Mark    Twitter         banner     MONK
8   Anna    Facebook        banner     MONK

言い換えれば、私が欲しいのは、基準に基づいて特定の情報を取得することです。例: データフレームで値「utmsource=」を検索し、見つかった場合は、「=」記号と「&」記号の間にある情報をコピーします。ユーザー番号 1 (Jame) の場合、元のファイルを見ると、彼女のソース URL には「utm_source=ADW」という値が含まれています。出力ファイルでは、「ADW」ビットが抽出され、「utm_source」という名前の新しい列に代入されます。他のすべてのユーザーと他のディメンション (utm_medium & utm_campaign) についても同じ原則

関数gsubが役立つことを理解しています。これが私がこれまでに試したことです:

> file1 <- read.csv("C:/Users/Dumitru Ostaciu/Desktop/Users.csv")
> file1 <- transform(file1, Source = as.character(Source))
> file2 <- gsub(".*\\?utm_source=", "", file1$Source)

そして、これが私が得た結果です

  UUID  SOURCE
    1   ADW&utm_medium=banner&utm_campaign=Monk&gclid1234
    2   Google&utm_medium=cpc&utm_campaign=DOG&gclid1234
    3   Yahoo&utm_medium=banner&utm_campaign=DOG&gclid1234
    4   Facebookdw&utm_medium=cpc&utm_campaign=CAT&gclid1234
    5   Twitter&utm_medium=GDNr&utm_campaign=CAT&gclid1234
    6   ADW&utm_medium=GDN&utm_campaign=DOG&gclid1234
    7   Twitter&utm_medium=banner&utm_campaign=MONK&gclid1234
    8   Facebook&utm_medium=banner&utm_campaign=MONK&gclid1234   

これについて 2 つの質問があります。

1)私が得た出力では、関数は値 "utm_source-" に続くすべてをコピーしました。「=」と「&」の間にあるものだけを数式でコピーするには、別のディメンションを追加する方法を教えてください。

2) 最初の列 (UUID)、ジェーン、マイク、ジョンなどに最初にあった値を保持するにはどうすればよいですか?

4

2 に答える 2

1

次の 2 つのことを行う必要があります。

  1. gsubソースからウェブサイト名を削除するために使用します
  2. strsplitが出現するたびに残りの文字列を区切るために使用します。?

データを読み込みます:

x <- read.table(text="
UUID    Source
1   Jane    http//mywebsite.com44bb00?utm_source=ADW&utm_medium=banner&utm_campaign=Monk&gclid1234
2   Mike    http//mywebsite.com44bb00?utm_source=Google&utm_medium=cpc&utm_campaign=DOG&gclid1234
3   John    http//mywebsite.com44bb00?utm_source=Yahoo&utm_medium=banner&utm_campaign=DOG&gclid1234
4   Sarah   http//mywebsite.com44bb00?utm_source=Facebookdw&utm_medium=cpc&utm_campaign=CAT&gclid1234
5   Michael http//mywebsite.com44bb00?utm_source=Twitter&utm_medium=GDNr&utm_campaign=CAT&gclid1234
6   Bob     http//mywebsite.com44bb00?utm_source=ADW&utm_medium=GDN&utm_campaign=DOG&gclid1234
7   Mark    http//mywebsite.com44bb00?utm_source=Twitter&utm_medium=banner&utm_campaign=MONK&gclid1234
8   Anna    http//mywebsite.com44bb00?utm_source=Facebook&utm_medium=banner&utm_campaign=MONK&gclid1234", header=TRUE, stringsAsFactors=FALSE)

strsplit各ソース文字列を区切るために使用し?ます。

z <- matrix(
  unlist(strsplit(gsub(".*\\?", "", x$Source), "\\&")), 
  ncol=4, byrow=TRUE)
cbind(x$UUID, gsub(".*=", "", z))

     [,1]      [,2]         [,3]     [,4]   [,5]       
[1,] "Jane"    "ADW"        "banner" "Monk" "gclid1234"
[2,] "Mike"    "Google"     "cpc"    "DOG"  "gclid1234"
[3,] "John"    "Yahoo"      "banner" "DOG"  "gclid1234"
[4,] "Sarah"   "Facebookdw" "cpc"    "CAT"  "gclid1234"
[5,] "Michael" "Twitter"    "GDNr"   "CAT"  "gclid1234"
[6,] "Bob"     "ADW"        "GDN"    "DOG"  "gclid1234"
[7,] "Mark"    "Twitter"    "banner" "MONK" "gclid1234"
[8,] "Anna"    "Facebook"   "banner" "MONK" "gclid1234"

次に、データ フレームに変換して名前を追加します。

z <- matrix(
  unlist(strsplit(gsub(".*\\?", "", x$Source), "\\&")), 
  ncol=4, byrow=TRUE)
z <- cbind(x$UUID, gsub(".*=", "", z))
z <- as.data.frame(z[, -5])
names(z) <- c("UUID", "UTM_SOURCE", "UTM_MEDIUM", "UTM_CAMPAIGN")
z

     UUID UTM_SOURCE UTM_MEDIUM UTM_CAMPAIGN
1    Jane        ADW     banner         Monk
2    Mike     Google        cpc          DOG
3    John      Yahoo     banner          DOG
4   Sarah Facebookdw        cpc          CAT
5 Michael    Twitter       GDNr          CAT
6     Bob        ADW        GDN          DOG
7    Mark    Twitter     banner         MONK
8    Anna   Facebook     banner         MONK
于 2012-11-20T12:09:01.560 に答える
1

これが私がやった方法です

> file1 <- read.csv("C:/Users/Dumitru Ostaciu/Desktop/Users.csv")
> file1 <- transform(file1, Source = as.character(Source))
> z <- matrix(
     unlist(strsplit(gsub(".*\\?", "", file1$Source), "\\&")), 
     ncol=4, byrow=TRUE)
> file2 <- cbind(file1$UUID, gsub(".*=", "", z))

これが私が得た結果です

    V1  V2          V3      V4      V5
1   3   ADW         banner  Monk    gclid1234
2   7   Google      cpc     DOG     gclid1234
3   4   Yahoo       banner  DOG     gclid1234
4   8   Facebookdw  cpc     CAT     gclid1234
5   6   Twitter     GDNr    CAT     gclid1234
6   2   ADW         GDN     DOG     gclid1234
7   5   Twitter     banner  MONK    gclid1234
8   1   Facebook    banner  MONK    gclid1234

私の実際のデータには 500.000 行があり、最初の列には一意の指定があることを指摘する必要があります。

V1 で名前が表示されるようにするにはどうすればよいですか? 私の間違いは何ですか?

于 2012-11-20T12:42:34.500 に答える