gpt4 book ai didi

r - 将字符串列表分成多个分区

转载 作者:行者123 更新时间:2023-12-04 17:38:33 25 4
gpt4 key购买 nike

这是我的问题。我有一个包含 20 万行的数据集。

  • 每行对应于对一个主题进行的测试。
  • 受试者有不同数量的测试。
  • 每个测试都有日期。

  • 我想为每个测试分配一个索引。例如。科目 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)

    最佳答案

    我猜想 split /重叠是消耗内存的原因。您应该考虑一种更加矢量化的方法。从示例代码的稍微修改版本开始:

    n <- 200000
    UniqueSubjectID <- replicate(500, paste(letters[sample(26, 5, replace=TRUE)], collapse =""))
    UniqueSubjectID <- unique(UniqueSubjectID)
    Dataset <- data.frame(SubID = sample(UniqueSubjectID , n, replace = TRUE))
    Dataset$Dates <- sample(c(dates = format(seq(ISOdate(2010,1,1), by='day', length=365), format='%d.%m.%Y')), n, replace = TRUE)

    假设您想要的是按主题按日期顺序计算测试的索引,您可以执行以下操作。
    Dataset <- Dataset[order(Dataset$SubID, Dataset$Dates), ]
    ids.rle <- rle(as.character(Dataset$SubID))
    Dataset$SubIndex <- unlist(sapply(ids.rle$lengths, function(n) 1:n))

    现在“数据集”中的“子索引”列包含测试的按主题编号的索引。这需要很少的内存,并且在我的 4GB Core 2 duo 笔记本电脑上运行几秒钟。

    关于r - 将字符串列表分成多个分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10614280/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com