18x18 のデータ フレームがあり、2 つの列のペアごとに 18 行の値が互いに比較されるように、列のすべての可能なペアを互いに比較したいと考えています。
私のデータは大きすぎてここに載せることができないので、これまでに思いついたことの小さな例を書きました:
> a <- c(1:18)
> b <- c(18:1)
> c <- c(1:9,18:10)
data <- as.data.frame(matrix(c(a,b,c), ncol = 3, nrow = 18))
> data
V1 V2 V3
1 1 18 1
2 2 17 2
3 3 16 3
4 4 15 4
5 5 14 5
6 6 13 6
7 7 12 7
8 8 11 8
9 9 10 9
10 10 9 18
11 11 8 17
12 12 7 16
13 13 6 15
14 14 5 14
15 15 4 13
16 16 3 12
17 17 2 11
18 18 1 10
たとえば、列 V1 と V3 を比較したいのですが、両方の列 (V1 と V3) の等しい値には 0 が割り当てられ、最初の列 (V1) の値が大きい場合は 1 が割り当てられ、 2 番目の列 (V3) が大きい場合、2 が割り当てられます。次のコードを使用して、ペアごとに手動でこれを実行し、結果を新しいデータ フレーム freqcomp に変換できます。
> freqcomp <- as.data.frame(table(ifelse(data[,1]==data[,3],0,ifelse(data[,1]>data[,3],1,ifelse(data[,1]<data[,3],2,NA)))))
>
> freqcomp
Var1 Freq
1 0 10
2 1 4
3 2 4
私が持っているすべての列に対してこの比較を自動化するにはどうすればよいですか? すべての列または使用できる他の関数を実行するための素敵な for ループはありますか?