Re: [問題] 在R中有處理http query string
做完才看到這份,我寫寫我的作法好了
S1 <- regexpr("\\?", XXX$text)
S1[S1 < 0] = NA
End <- 1000
XXX$text <- substr(XXX$text, S1+1, End)
--上面把?後面的取出來
XXX <- na.omit(XXX)
code_1 <- strsplit(XXX$text, "&")
names(code_1) <- XXX$id
--為了可以識別url來自哪個id
code_2 <- do.call(rbind, lapply(code_1, data.frame, stringsAsFactors = F))
do.call(rbind, ......)跟rbind不是一樣的嗎?可是我只用rbind解不出來
S2 <- regexpr("\\=", code_2$X..i..)
跟&的一樣 ^^^^^^我懶得改了
code_2$Name <- substr(code_12$X..i.., 1, S2-1)
code_2$Value <- substr(code_12$X..i.., S2+1, 50)
把=前後的值設為對應的值
S3 <- regexpr("\\.", rownames(code_2))
因為列名不能重複,所以id會出現.1、.2、.3、......我只要.之前的id
code_2$line_id <- substr(rownames(code_2), 1, S3-1)
result <- code_12[,c("line_id", "Name", "Value")]
rownames(result) <- NULL
這我自己龜毛,rowname看起來很阿砸
cast <- dcast(result, formula = id ~ Name, value.var = "Value")
這是大神的套件,我之前的動作就是為了產生這個cast
有其他更好的方法嗎?
求教了
※ 引述《celestialgod (天)》之銘言:
: 前面先隨便給他一個protocle跟host 加個?表示是query string
: 然後用httr::parse_url就可以輕鬆處理完了
: 剩下就是看你要什麼欄位mapping到table中,改個名字,然後as.data.frame即可
: library(httr)
: x <- parse_url(paste0("http://1?", "utm_source=apple&utm_campaign=PRO&",
: "utm_medium=banner&text_id=12228473&date=970101&",
: "loc=65173194cbfdbb89e06742a196ec150f"))
: x$query
: # $utm_source
: # [1] "apple"
: #
: # $utm_campaign
: # [1] "PRO"
: #
: # $utm_medium
: # [1] "banner"
: #
: # $text_id
: # [1] "12228473"
: #
: # $date
: # [1] "970101"
: #
: # $loc
: # [1] "65173194cbfdbb89e06742a196ec150f"
: ※ 引述《jklkj (誠實可靠小郎君)》之銘言:
: : [問題類型]:
: : 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
: : [軟體熟悉度]:
: : 入門(寫過其他程式,只是對語法不熟悉)
: : [問題敘述]:
: : 目前我有A、B兩個table
: : 我想做一件事是把兩個table先join成C,這部分沒問題我用merge
: : 之後我想當item欄位是空值時把text的資料擷取出部分
: : text的資料是url類似
: : utm_source=apple&utm_campaign=PRO&utm_medium=banner&text_id=12228473&date=
: : 970101&loc=65173194cbfdbb89e06742a196ec150f
: : 我想把各別的字串丟進資料庫的欄位中
: : 例如:
: : apple 丟進source欄位
: : PRO丟進campaign欄位
: : banner丟進medium欄位
: : 65173194cbfdbb89e06742a196ec150f丟進loc欄位
: : 但是text_id我沒有設欄位,所以不需要解析
: : [程式範例]:
: : if(C$item == "") {C$apple <- C$text}
: : 我本來是想說先丟進去再拆解,可是我連這個最基礎的都ERROR
: : the condition has length > 1 and only the first element will be used
: : 想問一下這怎麼處理
: : [環境敘述]:
: : R version 3.3.3 (2017-03-06)
: : Platform: x86_64-w64-mingw32/x64 (64-bit)
: : Running under: Windows 7 x64 (build 7601) Service Pack 1
: : locale:
: : [1] LC_COLLATE=Chinese (Traditional)_Taiwan.950 LC_CTYPE=Chinese (Traditional)_Taiwan.950
: : [3] LC_MONETARY=Chinese (Traditional)_Taiwan.950 LC_NUMERIC=C
: : [5] LC_TIME=Chinese (Traditional)_Taiwan.950
: : attached base packages:
: : [1] stats graphics grDevices utils datasets methods base
: : other attached packages:
: : [1] RPostgreSQL_0.4-1 DBI_0.6
: : loaded via a namespace (and not attached):
: : [1] tools_3.3.3
: : [關鍵字]:
: : ETL
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.23.167.43
※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1497503939.A.81C.html
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):