2012-11-20 2 views
0

는 질문에 최대 Folllow Searching for unique values in dataframe and creating a table with them 여기사용 GSUB 기능

내 데이터는

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 ="값을 검색하면 "="및 "&"기호 사이에있는 정보를 찾은 다음 복사하십시오. 원본 파일을 볼 때 사용자 no1 (Jame)의 경우 소스 URL의 값은 "utm_source = ADW"입니다. 출력 파일에서 "ADW"비트가 추출되고 "utm_source"라는 새 열에서 전 송됩니다. 다른 모든 사용자 및 기타 dimmensions에 대한 동일한 원칙 (utm_medium & utm_campaign)

본인은 gsub 기능이 저에게 도움이된다는 것을 알고 있습니다. 여기에 지금까지 시도 무엇 :

1) 내가 가진 출력 :

> 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 개 질문이 이 함수는 "utm_source-"값을 따르는 모든 것을 복사했습니다. "="과 "&"

사이의 수식 만 복사 할 수있는 다른 차원을 추가하는 방법 2) 첫 번째 열 (UUID), Jane, Mike, John의 값은 어떻게 유지합니까? , 등? ?

읽기의 각 발생시 남아있는 문자열을 분리하는 소스

  • 사용 strsplit에서 웹 사이트 이름을 제거하는

    1. 사용 gsub :

  • +0

    URL과 함께 작동하도록 특별히 설계된 도구를 사용하는 것이 더 좋지만 예제의 URL은 꽤 엉망입니다. – hadley

    답변

    1

    당신은 두 가지 일을 할 필요가 데이터 :

    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 
    
    +0

    cbind까지 잘 작동하지만, 그렇게하면 이름 대신 일련의 숫자가 나옵니다. 이 작업은 초기 파일의 열 UUID를 "as.character"로 변환하는 것과 관련이 있습니까? –

    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에 표시하려면 어떻게 수정해야합니까? 내 실수는 뭐니?