【问题标题】:Loops for each column每列的循环
【发布时间】:2016-02-25 17:37:24
【问题描述】:

我的问题: 我在数据框调用 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。 谢谢

【问题讨论】:

  • 这样可以吗:sapply(B, cor, y=A[[1]]) ?
  • 试试cor(A, B, method="spearman")
  • 方法 > cor(A,B,method="s") ,结果为 68 值。问题是,我不知道为什么,这个值与使用另一个软件(如 STATISTICA 6.0 )进行相同的分析时不同。 ?
  • 对不起...现在是正确的...非常感谢...比看起来容易

标签: r loops multiple-columns


【解决方案1】:

@CathG 指出最简单的解决方案如下:

cor(b, a) # Using the dataset below

以下解决方案没有 CathG 建议的那么短,但它们的价值在于它们更灵活。

或者,我会使用 applycor 以下列方式组合:

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)))

【讨论】:

  • 不只是cor(b, a) 做同样的事情吗?
  • @CathG,这确实是正确的,很好。我会将其添加为选项。我会保留其他选项,因为它们可以解决更普遍的问题。
猜你喜欢
  • 2014-04-02
  • 2017-04-28
  • 2018-06-09
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多