gpt4 book ai didi

r - R 中的无限函数/循环 : Data Management

转载 作者:行者123 更新时间:2023-12-02 18:09:46 25 4
gpt4 key购买 nike

我正在尝试重构一个巨大的数据框(大约 12.000 个案例):在旧的数据框中,一个人是一行,大约有 250 列(例如,第 1 个人,测试 A1,测试 A2,测试 B,...),我想要测试 A 的所有结果(1 - 10 A 的总体结果和该人的 24 个项目 (A-Y) 在一列中,因此一个人最终会得到 24 列和 10 行。项目 A-Y 之前还有一个固定的数据框部分开始(个人信息,如年龄、性别等),我想保留原样(修复数据)。该函数/循环适用于 30 个案例(我提前尝试过),但对于 12.000 个案例,它仍在计算,现在已经计算了近 24 小时。有什么想法吗?

restructure <- function(data, firstcol, numcol, numsets){
out <- data.frame(t(rep(0, (firstcol-1)+ numcol)) )
names(out) <- names(daten[0:(firstcol+numcol-1)])
for(i in 1:nrow(daten)){
fixdata <- (daten[i, 1:(firstcol-1)])

for (j in (seq(firstcol, ((firstcol-1)+ numcol* numsets), by = numcol))){
flexdata <- daten[i, j:(j+numcol-1)]
tmp <- cbind(fixdata, flexdata)
names(tmp) <- names(daten[0:(firstcol+numcol-1)])
out <- rbind(out,tmp)
}
}
out <- out[2:nrow(out),]
return(out)
}

提前致谢!

最佳答案

了解原因:在每次迭代中rbindout。随着数据的增长,每次迭代将花费更长的时间 - 因此,随着数据集的增加,您必须预期运行时间的增长将不仅仅是线性增长。

因此,正如 Andrie 所说,您可以查看melt

或者您可以使用核心 R:stack 来完成此操作。然后您需要自己将固定部分绑定(bind)到结果,(您需要使用 each = n.var.cols

重复固定列

第三种选择是 arrayhelpers 包中的 array2df

关于r - R 中的无限函数/循环 : Data Management,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8008317/

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