【发布时间】:2012-05-23 18:20:36
【问题描述】:
这是我的问题。我有一个包含 200k 行的数据集。
- 每一行对应于对受试者进行的测试。
- 受试者的测试次数不等。
- 每个测试都有日期。
我想为每个测试分配一个索引。例如。科目 1 的第一次测试为 1,科目 1 的第二次测试为 2。科目 2 的第一次测试为 1,依此类推。
我的策略是获取唯一主题 ID 的列表,使用 lapply 将数据集子集到使用唯一主题 ID 的数据框列表中,每个主题都有自己的数据框并进行测试。理想情况下,我将能够对每个主题的每个数据框进行排序并为每个测试分配一个索引。
但是,在 200k x 32 数据帧上执行此操作会使我的笔记本电脑(i5、Sandy Bridge、4GB 内存)很快耗尽内存。
我有两个问题:
- 有没有更好的方法来做到这一点?
- 如果没有,我克服内存限制的唯一选择是将唯一的 SubjectID 列表分解为更小的集合,例如每个列表 1000 个 SubjectID,将其应用到数据集,最后将列表连接在一起。然后,我如何通过提供一个表示分区数的整数来创建一个函数来破坏我的 SubjectID 列表。例如BreakPartition(Dataset, 5) 会将数据集平均分成 5 个分区。
这是生成一些虚拟数据的代码:
UniqueSubjectID <- sapply(1:500, function(i) paste(letters[sample(1:26, 5, replace = TRUE)], collapse =""))
UniqueSubjectID <- subset(UniqueSubjectID, !duplicated(UniqueSubjectID))
Dataset <- data.frame(SubID = sample(sapply(1:500, function(i) paste(letters[sample(1:26, 5, replace = TRUE)], collapse ="")),5000, replace = TRUE))
Dates <- sample(c(dates = format(seq(ISOdate(2010,1,1), by='day', length=365), format='%d.%m.%Y')), 5000, replace = TRUE)
Dataset <- cbind(Dataset, Dates)
【问题讨论】:
标签: r subset plyr data.table