【发布时间】:2014-03-21 16:31:56
【问题描述】:
我有两个数据框:
> head(k)
V1
1 1814338070
2 1199215279
3 1283239083
4 1201972527
5 404900682
6 3093614019
> head(g)
start end state value
1 16777216 16777471 queensland 15169
2 16777472 16778239 fujian 0
3 16778240 16779263 victoria 56203
4 16779264 16781311 guangdong 0
5 16781312 16781823 tokyo 0
6 16781824 16782335 aichi 0
> dim(k)
[1] 624979 1
> dim(g)
[1] 5510305 4
我想比较 data.frame(k) 中的每个值,并匹配它是否适合 data.frame(g) 的开始和结束范围,以及它是否从 data.frame 返回状态值和值(g)
我遇到的问题是由于数据框的尺寸以及进行匹配并返回我想要的值在我的计算机上需要 5 个小时。我使用了以下方法,但无法使用计算机上的所有内核,甚至无法正常工作:
return_first_match_position <- function(int, start,end) {
match = which(int >= start & int <= end)
if(length(match) > 0){
return(match[1])
}
else {
return(match)
}
}
library(parallel)
cl = makeCluster(detectCores())
matches = Vectorize(return_first_match_position, 'int')(k$V1,g$start, g$end)
p = parSapply(cl, Vectorize(return_first_match_position, 'int')(k$V1,g$start, g$end), return_first_match_position)
stopCluster(cl)
所需的输出是状态和值在 data.frame(g) 中的 data.frame(k) 中的数字的每次匹配时显示的 % 次数
想知道在 R 中有一种智能的并行处理方式吗? 任何人都可以建议(任何来源)我如何学习/改进 R 中的写作功能吗?
【问题讨论】:
-
你能举一个期望输出的例子吗?我相信我有适合你的解决方案,但我想确保我确切地知道你在寻找什么
-
例如,如果在 data.frame(k) 中,值 1814338070 介于 data.frame(g) 中的 16777472-16778239 范围内,则所需输出为 %state 和 %value .. 只是一个仅供参考的状态和 data.frame(g) 中的值是因素
-
所以对于 k 中的每个值,您都在寻找状态,值 start
-
期望的输出是在 data.frame(g) 中的 data.frame(k) 中的数字的每次匹配时,状态和值显示的次数百分比。我道歉应该说清楚,我在此编辑我的问题
-
能否请您输入()您的“g”和“k”,然后显示所需输出的示例?这将有很多帮助
标签: r parallel-processing cluster-computing vectorization rstudio