我想将数据从HTTP请求转换为数据框。
via httr
返回的数据采用以下格式,包含元数据,例如列标题和类型。
我想将其转换为相应的数据框:基于data$columnHeaders
的列 - 根据一组定义的规则进行解析(基于data$columnHeaders$dataType
或data$columnHeaders$name
似乎问题已经解决了,但是我找不到经过验证的,快速的&有效的解决方案。
dput()
的{{1}}结果:
data
答案 0 :(得分:1)
感谢可重复的例子。我在评论中建议的答案或多或少是我在这里提出的:
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
。
答案 1 :(得分:0)
我尝试(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
这是回答你的问题还是我理解错了?祝你好运!