2016-08-17 3 views
0

私のデータは次のようになります。2つの列(x、y)に含まれるすべてのデータペアに対してスピアマン相関を実行しますか? .csv形式で

私のような)(COR実行
sampleid blue   red    otuid 
AB1  0.001020366  0.000262013  K00001 
AB1  7.24E-05   0.00000307  K00002 
AB1  0.000500854  0.000635104  K00003 
AB1  3.50E-05   0.000000555  K00004 
AB1  0.000196537  0.0000346  K00005 
AB1  2.56E-05   2.92E-08   K00006 
AB1  0.00027525  0.0000392  K00007 
AB1  0.000177602  0.000000994  K00008 
AB1  0.000128098  0.000151901  K00009 
AB1  1.46E-06   0.000000468  K00010 
AB1  0.000348187  0.000571836  K00011 
AB1  0.000448518  0.000435364  K00012 
AB1  0.000490293  0.000729903  K00013 
AB1  0.000263668  0.00000567  K00014 
AB1  0.00054961  0.000406697  K00015 
AB2  0.001020366  0.000262013  K00001 
AB2  7.24E-05   0.00000307  K00002 
AB2  0.000500854  0.000635104  K00003 
AB2  3.50E-05   0.000000555  K00004 
AB2  0.000196537  0.0000346  K00005 
AB2  2.56E-05   2.92E-08   K00006 
AB2  0.00027525  0.0000392  K00007 
AB2  0.000177602  0.000000994  K00008 
AB2  0.000128098  0.000151901  K00009 
AB2  1.46E-06   0.000000468  K00010 
AB2  0.000348187  0.000571836  K00011 
AB2  0.000448518  0.000435364  K00012 
AB2  0.000490293  0.000729903  K00013 
AB2  0.000263668  0.00000567  K00014 
AB2  0.00054961  0.000406697  K00015 

d <- read.csv("name.csv") 
cor(rank(test[,3]),rank(test[,4]) 
[1] 0.777888 

私は、これはすべての相関テストが、私の平均Rであると仮定しています私は、テストごとにサンプル/ OTUあたりの個々のR(Y対X)を得ることができれば、私はこのようになりますテーブルを書き込むことができるように希望:あなたの助けを

otuid sampleid Spearman's R 
k00001 Sample1 0.001 
k00002 Sample1 0.012 
k00003 Sample1 0.013 
k00004 Sample1 0.015 ...... 

k00001 Sample2 0.001 
k00002 Sample2 0.012 
k00003 Sample2 0.013 
k00004 Sample2 0.015 

ありがとう!

Data.frameが一緒にこれを高速化する:purrrパッケージに次のようにコメントして、提供されたデータフレームを使用してに基づいて

sampleid = c("AB1","AB1","AB1","AB1","AB1","AB1","AB1","AB1","AB1", 
"AB1","AB1","AB1","AB1","AB1","AB2","AB2","AB2","AB2","AB2","AB2","AB2", 
"AB2","AB2","AB2","AB2","AB2","AB2","AB2","AB2","AB2") 
red = c(runif(30,0,100)) 
blue = c(runif(30,0,100)) 
otuid =c("K00001","K00002","K00003","K00004","K00005","K00006", 
"K00007","K00008","K00009","K00010","K00011","K00012", 
"K00013","K00014","K00015","K00001","K00002","K00003","K00004", 
"K00005","K00006","K00007","K00008","K00009","K00010", 
"K00011","K00012","K00013","K00014","K00015") 
df = data.frame(sampleid, red, blue,otuid) 
df 
print(p) 
+1

"sample/OTUID"でグループ化したときの現在のデータには、グループごとに1行があります。あなたはより良いことを明確にすることができますか?たとえば、 'OTUID = 00001'と' SampleID = 'Sample1''の行は1つだけです。 – steveb

+1

サンプルデータを再現できるデータフレームとして提供するのに役立ちます –

+0

あなたのコードも間違っています: 'cor(rank(test [、3])、rank(test [、4])'閉じ括弧がありません。ポイント、それはあなたが探しているかはっきりしていない、2つのポイントは、相関を作成しない(1つの行に2つのポイント、それは1つの観測...) –

答えて

1

、あなたは各サンプル内相関を計算することができます。

library(purrr) 

df %>% 
    split(.$sampleid) %>% 
    map_dbl(~ cor(.$blue, .$red)) 
#>  AB1  AB2 
#> 0.07714403 0.38077482 

ここに似た何かを得るために、ベースRの方法です:

by(df, df$sampleid, function(x) cor(x$blue, x$red)) 
#> df$sampleid: AB1 
#> [1] 0.205726 
#> -------------------------------------------------------- 
#> df$sampleid: AB2 
#> [1] 0.3237938 
+0

私は昨日書いたスクリプトよりも簡単ですね。 – user3105519

関連する問題