2

HTTPリクエストからのデータをデータフレームに変換したいと思います。

viahttrが返すデータは次の形式で、列ヘッダーやタイプなどのメタデータが含まれています。

これを対応するデータフレームに変換したい:に基づく列-定義されたルールのセットから解析された(またはdata$columnHeadersに基づくdata$columnHeaders$dataTypedata$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"))
4

2 に答える 2

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

私は列名が有効なR名であることを確認するために使用したことに注意してくださいmake.names()...そうしないと、列名にコロンが含まれてしまい、ダウンストリームで問題が発生します。

また、ここの行の間を読み、最初の列が日付を表し、2番目の列が数字を表すことになっていると仮定します。factorRは現在、これらの両方が変数であると考えていることに気付くでしょう。これらを適切なデータ型に変換する方法は次のとおりです。

#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

于 2012-10-01T17:45:20.473 に答える
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

これはあなたの質問に答えますか、それとも私はあなたを間違って理解しましたか?幸運を!

于 2012-10-01T13:49:21.607 に答える