Rで各データフレームの行をベクトルで分割する 質問する

Rで各データフレームの行をベクトルで分割する 質問する

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)逆の場合は を使用します。

おすすめ記事