2017-12-31 33 views
0

私は、このデータフレームの特定の列を使用して相関を計算し、計算された相関を含む新しい列を追加するのに十分なデータを各行に持つ大きなデータフレームを持っています。 、明らかにdplyr :: mutateを使用してRでペアワイズ相関を計算する

example_data %>% 
mutate(pearsoncor = cor(x = X001_F5_000_A:X030_F5_480_C, y = X031_H5_000_A:X060_H5_480_C)) 

私はpearsoncor列にのみNA'sを取得するとして、それがこのように動作していない、誰もが持っていない:ここでは

は私がやりたい内容の要約(dplyrを使用して、この1)であります提案?これを行う簡単な方法はありますか?

ベスト、

Example data frame

+0

正しく使用していないため動作しません。 'diag(cor(t(example_data [columnnames]))、t(example_data [columnnames])))'または '' purr''でmap2_dbl(as.data.frame(t(example_data [列名]))、as.data .frame(t(example_data [columnnames]))、cor) ' – akrun

+0

あなたの質問を見直し、https://stats.stackexchange.comで回答を得ることをお勧めします。私はあなたのために1つをコーディングするよりも統計的な問題だと思います。 –

答えて

0

私は数日戻って同じ問題を抱えていた、と私はループがRで最適ではないですが、それは私が考えることができる唯一のことだ知っている:

df$r = rep(0,nrow(df)) 
df$cor_p = rep(0,nrow(df)) 

for (i in 1:nrow(df)){ 
    ct = cor.test(as.numeric(df[i,cols_A]),as.numeric(df[i,cols_B])) 
df$r[i] = ct$estimate 
df$cor_p[i] = ct$p.value 
} 
+0

多くのありがとうEudald、私は効率的なソリューションを探しているときに回避策として同様のループを使用しました。私のデータセットでは、ループは完了するまでに約5分かかります: -/ – user2259380

+0

コーヒーを飲むのに完璧な時間;-) (私はもっと効率的なものを考えようとします!) – Eudald

0

ここでは、reshape2パッケージからmelt()へのデータフレームを長い形式にして、各値に独自の行があるようにするソリューションがあります。元のワイドフォームデータは、6つの遺伝子ごとに1行につき60個の値を持ちますが、溶けたロングフォームのデータフレームは360個の値を持ちます。次に、summarize()dplyrから簡単に使用して、ループのない相関を計算することができます。

library(reshape2) 
library(dplyr) 

names1 <- names(example_data)[4:33] 
names2 <- names(example_data)[34:63] 

example_data_longform <- melt(example_data, id.vars = c('Gene','clusterFR','clusterHR')) 

example_data_longform %>% 
    group_by(Gene, clusterFR, clusterHR) %>% 
    summarize(pearsoncor = cor(x = value[variable %in% names1], 
          y = value[variable %in% names2])) 

またdo()を使用して、Eudaldの答えのように、より詳細な結果を生成することがありました:

detailed_r <- example_data_longform %>% 
    group_by(Gene, clusterFR, clusterHR) %>% 
    do(cor = cor.test(x = .$value[.$variable %in% names1], 
        y = .$value[.$variable %in% names2])) 

これはcor列には、各遺伝子のcor.test()の結果にリストされてtibbleを出力します。 lapply()を使用して、リストから出力を抽出することができます。

lapply(detailed_r$cor, function(x) c(x$estimate, x$p.value)) 
関連する問題