16 列のデータ フレーム内の各数値を、各列の特定の数値で除算しようとしています。数値は、1 ~ 16 のデータ フレームとして保存され、より大きなデータ フレームの列 1 ~ 16 のサンプルに対応しています。列ごとに 1 つの数値があり、それを大きなスプレッドシートの各数値で除算して、最終的なスプレッドシートに出力する必要があります。
これが私が最初に始めた例です。分割するスプレッドシートです。
X131.478.1 X131.478.2 X131.NSC.1 X131.NSC.2 X166.478.1 X166.478.2
1/2-SBSRNA4 4 2 2 6 7 6
A1BG 93 73 88 86 58 65
A1BG-AS1 123 103 96 128 46 57
スプレッドシートを割る数値
X131.478.1 1.0660880
X131.478.2 0.9104053
X131.NSC.1 0.8642545
X131.NSC.2 0.9611866
X166.478.1 0.9711406
X166.478.2 1.0560121
そして、予想される結果は、必ずしもここで行ったように丸められるわけではありません。
X131.478.1 X131.478.2 X131.NSC.1 X131.NSC.2 X166.478.1 X166.478.2
1/2-SBSRNA4 3.75 2.19 2.31 6.24 7.20 5.68
A1BG 87.23 80.17 101.82 89.47 59.72 61.55
A1BG-AS1 115.37 113.13 111.07 133.16 47.36 53.97
私は、データ フレームを単純に mx2 = mx/sf で分割しようとしました。ここで、mx は大きなデータ セット、sf は分割する数値のデータ フレームです。これにより、すべてが sf データ セットの最初の数値で分割されるように見えました。
除算の数値は、DESeq パッケージの一部である estimateSizeFactors によって生成されました。
どんな助けでも大歓迎です。ありがとう!
ベストアンサー1
sweep
はこのような操作に便利ですが、入力として行列が必要です。そのため、データ フレームを行列に変換し、操作を実行してから、元の行列に変換します。たとえば、行列の各列の各要素をmat
ベクトルの対応する値で割ったダミー データは次のようになりますvec
。
mat <- matrix(1:25, ncol = 5)
vec <- seq(2, by = 2, length = 5)
sweep(mat, 2, vec, `/`)
使用例:
> mat
[,1] [,2] [,3] [,4] [,5]
[1,] 1 6 11 16 21
[2,] 2 7 12 17 22
[3,] 3 8 13 18 23
[4,] 4 9 14 19 24
[5,] 5 10 15 20 25
> vec
[1] 2 4 6 8 10
> sweep(mat, 2, vec, `/`)
[,1] [,2] [,3] [,4] [,5]
[1,] 0.5 1.50 1.833333 2.000 2.1
[2,] 1.0 1.75 2.000000 2.125 2.2
[3,] 1.5 2.00 2.166667 2.250 2.3
[4,] 2.0 2.25 2.333333 2.375 2.4
[5,] 2.5 2.50 2.500000 2.500 2.5
> mat[,1] / vec[1]
[1] 0.5 1.0 1.5 2.0 2.5
データ フレームから変換するにはas.matrix(df)
または を使用しdata.matrix(df)
、as.data.frame(mat)
逆の場合は を使用します。