幅の広いデータ フレームではなく、背の高いデータ フレームとして格納し、おそらく を使用しdata.table
て効率的に処理できます。つまり、始点と終点のペアごとに 1 行ではなく、要素ごとに 1 行を作成します。
library(data.table)
dt = data.table(Start=c(3, 3, 4, 4, 4), End=c(6, 6, 10, 10, 10), Elements=c(4, 5, 7, 8, 9))
# Start End Elements
#1: 3 6 4
#2: 3 6 5
#3: 4 10 7
#4: 4 10 8
#5: 4 10 9
これにより、各範囲にいくつの要素があるかを判断するなど、データに対して複数の種類の処理を非常に簡単に行うことができます。
dt[, list(Num.Elements=length(Elements)), by=c("Start", "End")]
# Start End Num.Elements
# 1: 3 6 2
# 2: 4 10 3
これにより、パッケージを使用したプロットでデータを使いやすくすることもできggplot
ます。通常、データは縦長の形式であることが期待されます。
このデータ構造は、要素ごとに Start と End を繰り返すため、無駄であることに気付くかもしれません。ただし、データ テーブルは非常に効率的に格納されます。要素のリストが文字通り数百万の長さであっても、この方法で簡単に収まり、処理できます。次のような行を試してください:
dt = data.table(Start=1:1e6, End=1:1e6, Elements=1:1e6)
デモンストレーション用。各要素リストを文字列として保持し、毎回分割するよりも、確実に処理が高速になります。