我的问题: 我在数据框中调用 data.frame(B) 有 68 列,每列有 12 个值(行)。
data.frame(B)
1° column 2° column 3° colum
1 1.65 1
2 7.8 2
3 1.2 3
4 3.4
5
6
7
.....
12
我有另一个 12 个值的数据框,调用 data.frame(A)。
data.frame(A)
[1] -1.5683842 -1.6448055 -1.5663070 -0.7598736 0.9843939 1.6856689
[7] 2.0073107 1.8840261 1.0726286 0.2148070 -0.8835503
[12] -1.3923268
我需要计算 data.frame(A) 和 data.frame(B) 每列之间的相关性测试 (cor.test),如果可能的话使用循环方法。 结果应为 A 的 unic 列与 B 的各列之间的 Spearman 相关性值为 68。 谢谢
最佳答案
@CathG 指出最简单的解决方案如下:
cor(b, a) # Using the dataset below
以下解决方案并不像 CathG 建议的那么短,但它们的值(value)在于更灵活。
或者,我会按以下方式组合使用 apply
和 cor
:
a = data.frame(matrix(runif(12*68), 12, 68))
b = runif(12)
cor_results = apply(a, 2, cor, y = b)
X1 X2 X3 X4 X5 X6
0.31350412 -0.05467418 -0.30931157 0.14405810 -0.02345752 -0.12373525
X7 X8 X9 X10 X11 X12
0.01908565 -0.22919558 0.39268615 0.32430387 0.35093708 -0.22047010
X13 X14 X15 X16 X17 X18
-0.39814052 -0.02533794 -0.03198359 0.58317791 -0.28128437 0.19024528
X19 X20 X21 X22 X23 X24
-0.07923733 0.19769458 0.15992906 -0.11981105 0.26952069 0.21392988
X25 X26 X27 X28 X29 X30
-0.40203609 -0.09928433 -0.10153816 0.04975818 -0.17193521 0.26193832
X31 X32 X33 X34 X35 X36
0.11082240 -0.26369909 0.37432923 -0.36222913 -0.19496623 0.37251599
X37 X38 X39 X40 X41 X42
-0.27698393 0.26546843 0.13865907 -0.05896102 0.38421875 0.40201066
X43 X44 X45 X46 X47 X48
-0.07955439 -0.23950890 0.20039167 -0.07278757 0.17397793 -0.34845780
X49 X50 X51 X52 X53 X54
-0.13418043 -0.09117669 0.50658960 -0.01355937 -0.19616894 0.67096919
X55 X56 X57 X58 X59 X60
0.07128920 -0.30915734 -0.26373001 -0.20921997 -0.55908983 -0.27541652
X61 X62 X63 X64 X65 X66
0.30810248 0.06467311 -0.15531110 -0.02854304 -0.10019493 -0.23069442
X67 X68
-0.63667406 -0.15019676
其中 apply
调用中的 2
表示我们将该函数应用于每一列。稍微短一点的是使用 sapply
(默认情况下迭代列):
sapply(a, cor, y = b) # Leads to the exact same result as above
缺点是它不能推广到 a
的任何维度。
或者更酷,使用dplyr
:
a %>% summarise_each(funs(cor(x = ., y = b)))
关于r - 每列循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33874007/