如何简化此R代码(xmlToList)

时间:2017-09-03 10:15:06

标签: r xml

library(XML)
library(plyr)
xmlfile=xmlParse("http://opendata.cwb.gov.tw/govdownload?dataid=F-D0047-089&authorizationkey=rdec-key-123-45678-011121314")
xmltop = xmlRoot(xmlfile) #gives content of root
T01 <- xmlToList(xmltop[[9]][[3]][[5]])
T02 <- xmlToList(xmltop[[9]][[4]][[5]])
T03 <- xmlToList(xmltop[[9]][[5]][[5]])
T04 <- xmlToList(xmltop[[9]][[6]][[5]])
T05 <- xmlToList(xmltop[[9]][[7]][[5]])
T01 <-ldply(T01, data.frame)
T02 <-ldply(T02, data.frame)
T03 <-ldply(T03, data.frame)
T04 <-ldply(T04, data.frame)
T05 <-ldply(T05, data.frame)
taiwan_tt <- data.frame(T01,T02,T03,T04,T05) 

如何简化此代码? 我试着用这个。

T01 <- xmlToList(xmltop[[9]][[seq(3,7)]][[5]])
T01 <-ldply(T01, data.frame)

但它没有用 请帮帮我

1 个答案:

答案 0 :(得分:1)

看看这是否能让你更接近你需要的东西。

# This is your code, commented out
#library(XML)
#library(plyr)

#xmlfile=xmlParse("http://opendata.cwb.gov.tw/govdownload?dataid=F-D0047-089&authorizationkey=rdec-key-123-45678-011121314")
#xmltop = xmlRoot(xmlfile) #gives content of root

现在为了简化你已经问过了。其中一部分至少有一些。

T0_list <- lapply(3:7, function(i) xmlToList(xmltop[[9]][[i]][[5]]))
names(T0_list) <- paste0('T0', 1:5)
T0_list <- ldply(T0_list, data.frame)
T0_list <- lapply(T0_list, function(T0){
                T0 <- lapply(T0, function(x) sub("\n", "", x, fixed = TRUE))
                T0 <- as.data.frame(T0)
                T0
            })

列表T0_list现在有你帖子的T01T05,并清除了换行符'\n'