1

R には、40,000 以上の行 (名前付き変数) の数値と 200 以上の列 (サンプル)を持つデータ オブジェクトシグナルがあります。各列のすべての行について、その列のbackgroundという名前の行の値を減算します。

以下のコードを使用して、R でシグナルオブジェクトの例を作成できます。この例では、列 A について、 channelNo1から3の値からバックグラウンド値 4 を減算します。同様に、列 B については、値 6 が減算されます。等々。Rでこれを達成する最も簡単な方法は何ですか?

text <- textConnection('
             A   B   C
channelNo1  12  22  32
channelNo2  13  21  33
channelNo3  12  21  30
background   4   6   8
')
signal <- read.table(text, header = TRUE)
close(text)

typeof(signal)
# returns 'list'

class(signal)
# returns 'data.frame'
4

1 に答える 1

2

R行列の要素は列ごとに方向付けられています(チェックアウトしmatrix(1:12, nrow=3)signal - signal[4,]、あなたが考えていることをしていません.2番目と3番目の値が同じ(そして15に等しい)である必要がある列Bをチェックしてください。次のように書くことができます

as.data.frame(Map("-", signal, as.vector(signal[4,])))

(これは比較的効率的だと思います)しかし、データは実際には行列(つまり、同種の型の長方形)のように見えるので、行列として操作する方がはるかに理にかなっています

m = as.matrix(signal)
sweep(m, 2, m[4,], "-")
于 2012-05-27T00:56:40.397 に答える