次のように、2つのベクトルで「list.paired」と呼ばれるexpand.gridで作成したデータフレームがあります。
Var1 Var2
1 measure1 measure1
2 measure2 measure1
3 measure3 measure1
4 measure4 measure1
5 measure5 measure1
6 measure6 measure1
7 measure7 measure1
8 measure2 measure2
9 measure2 measure3
10 ... and so on, detailing every combination of the 7 variables
各メジャーは、別のデータフレームのベクトルを参照します。例:longdata $measure1。
たとえば、longdat $measure1を参照するには、次のコードを使用できます。
eval(parse(text = paste("longdat$",list.paired[1,1], sep =""))
list.pairedの各組み合わせ間で相関関係を実行するループを作成し、longdatに保存されたデータを参照します。例えば。、:
x = eval(parse(text = paste("longdat$",list.paired[2,1],".long", sep =""))) #longdat$measure2
y = eval(parse(text = paste("longdat$",list.paired[2,2],".long", sep =""))) #longdat$measure1
cor(x, y)
これまでのところ、list.pairedの変数の各ペアを循環するループを設計することに失敗しました。提案を本当に感謝します。
回答 3 件
cor(measure1、measure2)はcor(measure2、measure1)と同じであり、cor(measure1、measure1)は1であるため、このアプローチには多くの冗長性があると思います。
このアプローチはうまくいくでしょうか?
# your long data df<- data.frame(col1 = runif(100),col2 = runif(100),col3 = runif(100),col4 = runif(100),col5 = runif(100),col6 = runif(100),col7 = runif(100)) # your vector with correlations between unique combinations of columns cor.vec <- apply(combn(7,2), 2, function(idx) cor(df[,idx[1]],df[,idx[2]]))
以下のデータフレームを想定しています:
list.paired <- data_frame( Var1 = str_c("measure", rep(1:3, each = 3)), Var2 = str_c("measure", rep(1:3, 3)) ) longdat <- data_frame( measure1 = rnorm(10), measure2 = rnorm(10), measure3 = rnorm(10) )
ループオプションは次のとおりです。
results <- list() for (v1 in list.paired$Var1) for (v2 in list.paired$Var2) { results <- c(results, cor(longdat[v1], longdat[v2])) names(results[[length(results)]]) <- paste(v1, "*", v2) }
または、
purrr
を使用して パッケージ(mapply
ほぼ同じことができます):purrr:pmap( list.paired, function(Var1, Var2) { res <- cor(longdat[[Var1]], longdat[[Var2]]) names(res) <- paste(Var1, "*", Var2) return(res) } )
ただし、必要なのは
cor(longdat)
だけです ?
関連記事
- データフレームのセル内の値のベクトルを、対応する行の列値として変換します
- R:データフレームの列名をベクトルに自動的に連結します
- データフレームから円グラフを取得できないのはなぜですか。 TypeError: '<'は 'str'と 'int'のインスタンス間ではサポートされていません
- 2つの日付の間のPythonの毎週のデータフレーム
- データフレームRの2行間の一致数
- データフレーム内のベクトル間のコサイン類似度を見つけるにはどうすればよいですか?
- pythonデータフレームで以下の操作を実行するにはどうすればよいですか
- 1つのベクトルとベクトルのリストの間の内積を計算するにはどうすればよいですか?
- タイプ間の相関行列を計算する
- 文字のベクトルからデータフレームにダミー変数を作成するにはどうすればよいですか?
ネストされたforループを使用できます。
ただし、これはかなり遅くなります。より高速な方法は
cbind
になります ベクトルを2つの別々の行列m1
に およびm2
そして、cor(m1,m2)
を実行します 。cor
のドキュメントによると :xとyが行列の場合、xの列とyの列の間の共分散(または相関)が計算されます。