首页 > 解决方案 > 如何减少R中循环的执行时间?

问题描述

我有一个具有以下结构的大型数据集(1800 万行):

公司产品

1个

2个

3个

4个

2乙

4乙

1℃

3℃

2 天

3D

4 天

它实际上告诉了哪个公司生产什么。我想做以下事情:假设技术上接近的产品是在同一家公司内共同生产的(例如,产品 A 和 D 在 75% 的情况下是共同生产的),我想计算技术接近度矩阵. 我使用下面的代码来执行此操作,但执行它需要几天(实际上大约是两周)。

如果我应用 dcast() 而不是 for 循环,我会收到以下错误:“split_indices(.group, .n) :n must be a positive integer” 下面是代码:

文件名 = paste0('firm_bvd_product_all_location.csv')

micro_data = read.csv(文件名,sep = '|')

x_1 = micro_data[,c(1,3)]

x_2 = x_1[!is.na(x_1$product), ]

测试 = 唯一(x_2$product)

y_3 = NULL

y_4 = 空

对于(我在测试中)

{

y_1 = 子集(x_2,产品==i)

对于(测试中的 j)

{

y_2 = subset(x_2, product==j)

y_3[[j]] = nrow(merge(y_1,y_2,by = "firm", all=FALSE))/max(nrow(y_1),nrow(y_2))

}

y_4[[i]] = unlist(y_3)

}

x_3 = 矩阵(unlist(y_4),nrow=length(test),ncol=length(test))

行名(x_3)=排序(测试)

列名(x_3)=排序(测试)

将非常感谢任何有助于减少执行时间的想法。

标签: for-looptimeexecution

解决方案


推荐阅读