gpt4 book ai didi

r - R中的plyr在合并过程中非常慢

转载 作者:行者123 更新时间:2023-12-04 19:29:57 27 4
gpt4 key购买 nike

我在 R 中使用 plyr 包来执行以下操作:

  • 根据A列和B列从表A中取出一行
  • 从表B中找出A列和B列有相同值的行
  • 将B表的C列复制到A表

我已经制作了进度条来显示进度,但是在它显示到 100% 之后它似乎还在运行,因为我看到我的 CPU 仍然被 RGUI 占用,但它并没有结束。

我的表 A 有大约 40000 行数据,并且 A 列和 B 列是唯一的。

我怀疑 plyr 中“拆分-征服-组合”工作流的“组合”部分无法处理这 40000 行数据,因为我可以为另一个具有 4000 行数据的表做这件事。

有什么提高效率的建议吗?谢谢。

更新

这是我的代码:

for (loop.filename in (1:nrow(filename)))
{print("infection source merge")
print(filename[loop.filename, "table_name"])
temp <- get(filename[loop.filename, "table_name"])
temp1 <- ddply(temp,
c("HOSP_NO", "REF_DATE"),
function(df)
{temp.infection.source <- abcde[abcde[,"Case_Number"]==unique(df[,"HOSP_NO"]) &
abcde[,"Reference_Date"]==unique(df[,"REF_DATE"]),
"Case_Definition"]
if (length(temp.infection.source)==0) {
temp.infection.source<-"NIL"
} else {
if (length(unique(temp.infection.source))>1) {
temp.infection.source<-"MULTIPLE"
} else {
temp.infection.source<-unique(temp.infection.source)}}
data.frame(df,
INFECTION_SOURCE=temp.infection.source)
},
.progress="text")
assign(filename[loop.filename, "table_name"], temp1)
}

最佳答案

如果我正确理解了您要实现的目标,那么这应该可以非常快速地完成您想要的操作,并且不会造成太多内存损失。

#toy data
A <- data.frame(
A=letters[1:10],
B=letters[11:20],
CC=1:10
)

ord <- sample(1:10)
B <- data.frame(
A=letters[1:10][ord],
B=letters[11:20][ord],
CC=(1:10)[ord]
)
#combining values
A.comb <- paste(A$A,A$B,sep="-")
B.comb <- paste(B$A,B$B,sep="-")
#matching
A$DD <- B$CC[match(A.comb,B.comb)]
A

这仅适用于组合唯一的情况。如果不是,则您必须先解决这个问题。如果没有这些数据,就不可能确切地知道您要在完整的功能中实现什么,但是您应该能够将此处给出的逻辑移植到您自己的案例中。

关于r - R中的plyr在合并过程中非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3985242/

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