2016-08-17 48 views
0

我.csv格式的數據是這樣的:對包含在兩列(x,y)中的所有數據對執行Spearman相關?

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 

當我運行COR()這樣:

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

我假定這是所有的相關測試,但我平均R如果我能得到每個樣品/ OTU每個測試單獨的R(X與Y)寧願這樣的,我可以寫一個表,看起來像這樣:

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沿着加速這一:

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

按「樣本/ OTUID」分組時,您的當前數據每組有1行。你能澄清更好的想法嗎?例如,'OTUID = 00001'和'SampleID ='Sample1''只有一行。 – steveb

+1

它有助於提供樣本數據作爲可複製的數據框 –

+0

您的代碼也是錯誤的:cor(rank(test [,3]),rank(test [,4])缺少右括號。該點,它不清楚你在找什麼,兩點不作相關(兩個點在一排,這是一個觀察...) –

回答

1

基於您的評論和使用所提供的數據幀,可以將每個樣品內計算相關與purrr包如下:

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

相關問題