您可以将其存储为一个高数据框而不是一个宽数据框,并且可能使用data.table
它来有效地处理它。也就是说,每个元素一行而不是每个起始对一行
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)
进行演示。处理起来肯定比将每个元素列表保存为字符串并每次拆分它要快。