【发布时间】:2016-03-06 00:40:45
【问题描述】:
我有一个 n 列和 r 行的数据框。我想确定哪一列与第 1 列最相关,然后聚合这两列。聚合列将被视为新列 1。然后,我从集合中删除最相关的列。因此,日期的大小减少了一列。然后我重复这个过程,直到数据框result有n列,第二列是两列的聚合,第三列是三列的聚合,等等。因此我想知道是否有一个有效的或更快的方法来获得我想要的结果。我尝试了各种方法,但到目前为止都没有成功。有什么建议吗?
n <- 5
r <- 6
> df
X1 X2 X3 X4 X5
1 0.32 0.88 0.12 0.91 0.18
2 0.52 0.61 0.44 0.19 0.65
3 0.84 0.71 0.50 0.67 0.36
4 0.12 0.30 0.72 0.40 0.05
5 0.40 0.62 0.48 0.39 0.95
6 0.55 0.28 0.33 0.81 0.60
result 应该是这样的:
> result
X1 X2 X3 X4 X5
1 0.32 0.50 1.38 2.29 2.41
2 0.52 1.17 1.78 1.97 2.41
3 0.84 1.20 1.91 2.58 3.08
4 0.12 0.17 0.47 0.87 1.59
5 0.40 1.35 1.97 2.36 2.84
6 0.55 1.15 1.43 2.24 2.57
【问题讨论】:
-
你分析过你的代码吗?我猜想两次执行
cor(temp)需要一些时间来处理更大的数据。将其分配给一个对象并只进行一次这些计算。此外,cor(temp)计算所有相关性,但您只需要与第一列的相关性。尝试使用sapply(temp[,-1], function(x) cor(temp[,1], x)之类的方法来获取仅与第一列的相关性。 -
@coffeinjunky “个人资料代码”是什么意思?另外,我将如何将您的建议纳入此脚本?我已经尝试在循环中添加它,但我不确定如何添加。
-
对于分析,参见例如adv-r.had.co.nz/Profiling.html
-
@coffeinjunky 我已经分析了代码,发现瓶颈确实发生在不断计算相关性时。
-
在这种情况下,请尝试使用
which.max(sapply(temp[,-1], function(x) cor(temp[,1], x) ))。它将遍历temp的每一列并计算与第一列的相关性。现在您正在计算所有可能的相关性(两次),甚至是那些您不关心的相关性。
标签: r