作者jklkj (诚实可靠小郎君)
看板R_Language
标题Re: [问题] 在R中有处理http query string
时间Thu Jun 15 13:18:57 2017
做完才看到这份,我写写我的作法好了
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://webptt.com/cn.aspx?n=bbs/R_Language/M.1497503939.A.81C.html