根据列名计算两列之间的相关性
Calculate correlation between two columns based on column names
我正在尝试根据列名称中的匹配模式计算数据框中两列之间的相关性。在这种情况下,我想获得列 'Obs1_grp1' 和 'Obs1_grp2'、'Obs2_grp1' 和 'Obs2_grp2' 之间的相关性,依此类推。
> test
Individual Obs1_grp1 Obs2_grp1 Obs3_grp1 Obs1_grp2 Obs2_grp2 Obs3_grp2
1 293748 1583 0.09858 0.7639 15.70 0.5877 3230
2 294934 1353 0.11090 0.7639 15.58 0.5697 3604
3 290652 1400 0.11030 0.7639 14.93 0.5779 3462
4 291320 1377 0.11480 0.7639 15.63 0.5706 3130
5 292553 1253 0.10640 0.7639 15.41 0.5750 3601
6 295073 1306 0.09881 0.7639 15.54 0.5829 3630
7 290966 1523 0.10960 0.7639 15.48 0.5724 3274
8 293501 1472 0.10090 0.7639 15.31 0.5764 3507
9 295464 1603 0.10000 0.7639 15.66 0.5816 3512
10 291367 1476 0.09944 0.7639 15.38 0.5805 3116
11 295007 1517 0.11290 0.7639 14.98 0.5773 3130
12 295006 1340 0.11290 0.7639 14.98 0.5773 3130
13 290570 1314 0.10000 0.7639 15.45 0.5806 3759
14 293940 1515 0.10350 0.7639 15.55 0.5824 3564
15 293925 1259 0.10890 0.7639 15.15 0.5757 3593
16 291353 1494 0.09944 0.7639 15.38 0.5805 3116
17 292783 1637 0.10180 0.7639 15.38 0.5754 3396
18 290833 1202 0.11030 0.7639 13.66 0.5743 3106
19 291826 1298 0.10570 0.7639 16.26 0.5786 3946
20 294410 1539 0.10070 0.7639 15.39 0.5829 3550
我想使用 grep 函数,但不确定如何使用?
此外,我想将计算出的相关性放入数据表中,并为每个相关性指定 Obs。像这样:
> correl
Obs cor
1 Obs1 0.853
2 Obs2 0.952
希望有人能在这里提供帮助。
您可以创建这样的函数:
cor_f <- function(x) {
cor(test[,names(test)[grepl(x, names(test))]])[2]
}
cor_f('Obs1') #correlation between Obs1_grp1 and Obs1_grp2
#0.3159908
如果您需要循环,一种方法是:
vars <- c('Obs1', 'Obs2')
sapply(vars, function(i) cor_f(i))
我正在尝试根据列名称中的匹配模式计算数据框中两列之间的相关性。在这种情况下,我想获得列 'Obs1_grp1' 和 'Obs1_grp2'、'Obs2_grp1' 和 'Obs2_grp2' 之间的相关性,依此类推。
> test
Individual Obs1_grp1 Obs2_grp1 Obs3_grp1 Obs1_grp2 Obs2_grp2 Obs3_grp2
1 293748 1583 0.09858 0.7639 15.70 0.5877 3230
2 294934 1353 0.11090 0.7639 15.58 0.5697 3604
3 290652 1400 0.11030 0.7639 14.93 0.5779 3462
4 291320 1377 0.11480 0.7639 15.63 0.5706 3130
5 292553 1253 0.10640 0.7639 15.41 0.5750 3601
6 295073 1306 0.09881 0.7639 15.54 0.5829 3630
7 290966 1523 0.10960 0.7639 15.48 0.5724 3274
8 293501 1472 0.10090 0.7639 15.31 0.5764 3507
9 295464 1603 0.10000 0.7639 15.66 0.5816 3512
10 291367 1476 0.09944 0.7639 15.38 0.5805 3116
11 295007 1517 0.11290 0.7639 14.98 0.5773 3130
12 295006 1340 0.11290 0.7639 14.98 0.5773 3130
13 290570 1314 0.10000 0.7639 15.45 0.5806 3759
14 293940 1515 0.10350 0.7639 15.55 0.5824 3564
15 293925 1259 0.10890 0.7639 15.15 0.5757 3593
16 291353 1494 0.09944 0.7639 15.38 0.5805 3116
17 292783 1637 0.10180 0.7639 15.38 0.5754 3396
18 290833 1202 0.11030 0.7639 13.66 0.5743 3106
19 291826 1298 0.10570 0.7639 16.26 0.5786 3946
20 294410 1539 0.10070 0.7639 15.39 0.5829 3550
我想使用 grep 函数,但不确定如何使用?
此外,我想将计算出的相关性放入数据表中,并为每个相关性指定 Obs。像这样:
> correl
Obs cor
1 Obs1 0.853
2 Obs2 0.952
希望有人能在这里提供帮助。
您可以创建这样的函数:
cor_f <- function(x) {
cor(test[,names(test)[grepl(x, names(test))]])[2]
}
cor_f('Obs1') #correlation between Obs1_grp1 and Obs1_grp2
#0.3159908
如果您需要循环,一种方法是:
vars <- c('Obs1', 'Obs2')
sapply(vars, function(i) cor_f(i))