これは初心者のRの質問です。私は、Web サイト分析に R を使用することを検討し始めています。ページに依存するプロパティの任意のセットとともに、共通のプロパティを持つ一連のページ ビュー イベントがあります。たとえば、すべてのイベントにはuserId
、createdAt
、およびがありますpageId
が、ページにはやなどの値を"signup"
持つ特別なプロパティがある場合があります。origin
"adwords"
"organic"
JSON では、データは次のようになります。
[
{
"userId":null,
"pageId":"home",
"sessionId":"abcd",
"createdAt":1381013741,
"parameters":{},
},
{
"userId":123,
"pageId":"signup",
"sessionId":"abcd",
"createdAt":1381013787,
"parameters":{
"origin":"adwords",
"campaignId":4
}
}
]
このデータを R データ構造で効果的に表現するのに苦労しています。特に、任意のキーと値のペアに基づく条件でイベント リストをサブセット化できる必要があります。たとえば、pageId=="signup"
とorigin=="adwords"
.
任意のパラメーターに使用されるキーには十分な多様性があるため、考えられるすべてのキーに対してまばらに入力された列を作成するのは不合理に思えます。
私が現在行っているのは、データを次の形式の2 つの CSV ファイルcore_properties.csv
に前処理することです。parameters.csv
# core_properties.csv (one record per pageview)
userId,pageId,sessionId,createdAt
,home,abcd
123,signup,abcd,1381013741
...
# parameters.csv (one record per k/v pair)
row,key,value # <- "row" here denotes the record index in core_properties.csv
1,origin,adwords
1,campaignId,4
...
次に、read.table
各ファイルをデータ フレームに格納し、コア イベント データ フレームのセル内に k/v ペアのリスト (names=keys を含む) を格納しようとしています。これは多くのぎこちない試行錯誤でしたが、これまでに見つけた最良のアプローチは次のとおりです。
events <- read.csv('core_properties.csv', header=TRUE)
parameters <- read.csv('parameters.csv',
header=TRUE,colClasses=c("character","character","character"))
paramLists <- sapply(1:nrow(events), function(x) { list() })
apply(parameters,1,function(x) {
paramLists [[ as.numeric(x[["row"]]) ]][[ x[["key"]] ]] <<- x[["value"]] })
events$parameters <- paramLists
events[1,][["parameters"]][[1]][["origin"]]
これで、次の構文で最初のイベントのoriginプロパティにアクセスできるようになり[[1]]
ました。データ フレームは、セルの個々の値としてリストが与えられることを認識していないようです。
> events[1,][["parameters"]] <- list()
Error in `[[<-.data.frame`(`*tmp*`, "parameters", value = list()) :
replacement has 0 rows, data has 1
この種のデータを処理するためのベスト プラクティスはありますか? マニュアルやチュートリアルで議論されていません。
ありがとうございました!