【发布时间】:2014-04-11 12:44:10
【问题描述】:
我正在使用 R 中数据框中的数据创建距离矩阵。
我的数据框有 2244 个位置的温度:
plot temperature
A 12
B 12.5
C 15
... ...
我想创建一个矩阵来显示每对位置之间的温差:
. A B C
A 0 0.5 3
B 0.5 0 0.5
C 3 2.5 0
这是我在 R 中提出的:
temp_data #my data frame with the two columns: location and temperature
temp_dist<-matrix(data=NA, nrow=length(temp_data[,1]), ncol=length(temp_data[,1]))
temp_dist<-as.data.frame(temp_dist)
names(temp_dist)<-as.factor(temp_data[,1]) #the locations are numbers in my data
rownames(temp_dist)<-as.factor(temp_data[,1])
for (i in 1:2244)
{
for (j in 1:2244)
{
temp_dist[i,j]<-abs(temp_data[i,2]-temp_data[j,2])
}
}
我已经用一个小示例尝试了代码:
for (i in 1:10)
而且效果很好。 我的问题是计算机现在已经运行了整整两天,但还没有完成。
我想知道是否有一种方法可以更快地做到这一点。我知道循环中的循环需要很多次,我试图填充超过 500 万个单元格的矩阵,这需要很长时间是有道理的,但我希望有一个公式可以得到相同的结果更快的时间,因为我必须对降水和其他变量做同样的事情。
我还阅读了有关 dist 的信息,但我不确定是否可以使用我拥有的数据框使用该公式。
非常感谢您的合作。
非常感谢。
【问题讨论】:
-
您是否在一些示例数据上尝试过
dist(temp_data$temperature, method="euclidean", diag=TRUE, upper=TRUE)?我不知道处理大型数据集需要多长时间,但可能值得研究。 -
它是即时的......对不起这样一个愚蠢的问题,非常感谢您的回答。 @romansegelskyi 这确实是一个类似的问题。