[英]Most efficient way to parse data & meta data into corresponding dataframe
我想將數據從HTTP請求轉換為數據幀。
via httr
返回的數據采用以下格式,其中包含元數據,例如列標題和類型。
我想將其轉換為相應的數據框:基於data$columnHeaders
列-從定義的一組規則中解析(基於data$columnHeaders$dataType
或data$columnHeaders$name
看來問題已經解決了,但是我找不到可靠,快速而有效的解決方案。
的dput()
的結果data
:
data <- structure(list(columnHeaders = list(structure(list(name = "ga:date",
columnType = "DIMENSION", dataType = "STRING"), .Names = c("name",
"columnType", "dataType")), structure(list(name = "ga:visitors",
columnType = "METRIC", dataType = "INTEGER"), .Names = c("name",
"columnType", "dataType"))), rows = list(c("20120912", "26121"
), c("20120913", "32003"), c("20120914", "38348"), c("20120915",
"26679"), c("20120916", "26249"), c("20120917", "29867"), c("20120918",
"31572"), c("20120919", "27576"), c("20120920", "26730"), c("20120921",
"28598"), c("20120922", "25319"), c("20120923", "27428"), c("20120924",
"33255"), c("20120925", "32071"), c("20120926", "28272"))), .Names = c("columnHeaders",
"rows"))
感謝您提供可復制的示例。 我在評論中建議的答案或多或少是我在這里提出的:
out <- as.data.frame(do.call("rbind", data[["rows"]]))
names(out) <- make.names(sapply(data[["columnHeaders"]], "[[", 1))
str(out)
#-----
'data.frame': 15 obs. of 2 variables:
$ ga.date : Factor w/ 15 levels "20120912","20120913",..: 1 2 3 4 5 6 7 8 9 10 ...
$ ga.visitors: Factor w/ 15 levels "25319","26121",..: 2 12 15 4 3 10 11 7 5 9 ...
head(out,3)
#-----
ga.date ga.visitors
1 20120912 26121
2 20120913 32003
3 20120914 38348
請注意,我使用了make.names()
來確保列名是有效的R名稱...否則,您將在列名中以冒號結尾,這將在下游出現問題。
我還將在這里在行與行之間進行閱讀,並假定您的第一列應表示日期,第二列應表示數字。 您會注意到R當前認為這兩個都是factor
變量。 我將按照以下方法將它們轉換為適當的數據類型:
#Date column
out$ga.date <- as.Date(out$ga.date, format = "%Y%m%d")
#Numeric column
out$ga.visitors <- as.numeric(as.character(out$ga.visitors))
str(out)
#-----
'data.frame': 15 obs. of 2 variables:
$ ga.date : Date, format: "2012-09-12" "2012-09-13" "2012-09-14" ...
$ ga.visitors: num 26121 32003 38348 26679 26249 ...
現在,我認為您可以進行一些有用的分析。 有關格式化日期和日期/時間對象的詳細信息,請參見?as.Date
和?strptime
。
我試圖(a)復制您的數據,(b)將復制的數據轉換為數據框。
#(a) Replicating data
a<-c("20120912", "26121")
b<-c("20120913", "32003")
c<-c("20120914", "38348")
data<-rbind(a,b,c)
colnames(data)<-c("date","visitors")
#(b) Converting to data frame
str(data) #chr [1:3, 1:2]
data<-data.frame(data)
str(data) #'data.frame': 3 obs. of 2 variables
這是回答您的問題還是我對您的理解不正確? 祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.