2

次のデータセットがあります

> head(data)
  X    UserID NPS V3 V4 V5                                   Event              V7          Element                            ElementValue 
1 1 254727216  10  0 19 10 nps.agent.14b.no other attempt was made 10/4/2014 23:59 cea.element_name nps.agent.14b.no other attempt was made
2 2 298379949   0  0 28 11 nps.agent.14b.no other attempt was made 9/30/2014 23:59 cea.element_name nps.agent.14b.no other attempt was made
3 3 254710917   0  0 20 12 nps.agent.14b.no other attempt was made 9/15/2014 23:59 cea.element_name nps.agent.14b.no other attempt was made
4 4 238919392   7  0 17  9 nps.agent.14b.no other attempt was made 9/17/2014 23:59 cea.element_name nps.agent.14b.no other attempt was made
5 5 144693025  10  0 18 10 nps.agent.14b.no other attempt was made 9/17/2014 23:59 cea.element_name nps.agent.14b.no other attempt was made
6 6 249978568   5  0 21 12 nps.agent.14b.no other attempt was made 9/18/2014 23:59 cea.element_name nps.agent.14b.no other attempt was made

データセットを次のように分割すると:

data_splitted <- split(data,data$UserID)

ここでの問題は、このサンプルではなくデータセット全体でこれを試すと、RAM を超えるサイズの大幅な増加です。

> format(object.size(data),units="Mb")
[1] "0.2 Mb"
> format(object.size(data_splitted),units="Mb")
[1] "45.7 Mb"

なぜこれが起こっているのか、そしてこれに取り組む方法があるかどうかについての洞察をいただければ幸いです。

4

2 に答える 2

3

これを試して:

data$UserID <- as.character(data$UserID)
data_splitted <- split(data,data$UserID)

あなたの場合、ID は数値だったので、作成されたリストのインデックス (位置) として数値が使用されましたが、これは明らかに正しくありません。id の数がかなり多くなるため、R はギャップを可能な限り多くの空のリストで埋めました (したがって、巨大なオブジェクト サイズ)。id を文字変数にすることで、これを回避します。

1行のデータフレーム内でid変数をそのままにしておく別の方法は次のとおりです。

data_splitted <- list()
for(i in 1:nrow(data))
  data_splitted[[as.character(data$UserID[i])]] <- data[i,]

新しく作成されたリストの要素にアクセスする$には、演算子を使用する場合は数字を引用符で囲む必要があります。

data_splitted$"144693025"
data_splitter[["144693025"]]

別のオプションは、数値 ID の前に文字を追加することです。例えば:

data$UserID <- paste0("id",data$UserID)
data_splitted <- split(data,data$UserID)

これにより、リスト項目へのアクセスがより便利になります:

data_splitted$id144693025
data_splitted$id238919392
于 2015-03-19T06:00:47.537 に答える