1

基本的に大きな行列のサブセットですが、値が異なる小さな行列がたくさんあります。これらのサブマトリックスから値を取得し、より大きなマトリックスの対応する値を上書きしたいと考えています。たとえば、これが私のより大きな行列だとします。

        AB-2000 AB-2600 AB-3500 AC-0100 AD-0100 AF-0200
AB-2000   6.5      NA    -1.8    3.65    -17.96  -26.5
AB-2600    NA     7.18    NA      NA       NA      NA
AB-3500  -1.79     NA     5.4     NA     -4.63     NA
AC-0100   3.65     NA     NA     4.22     9.8      NA
AD-0100 -17.96     NA    -4.63    9.8     5.9      NA
AF-0200 -26.5      NA     NA      NA       NA     4.28

より小さなマトリックスは次のようになります。

        AB-2000 AB-3500
AB-2000    5.5    2.5
AB-3500    2.5    6.5

したがって、たとえば、小さなマトリックス (2.5) の AB-2000 行と AB-3500 列の交点から値を取得し、それを大きなマトリックスの新しい値として設定し、同じことを行いたいと考えています。サブマトリックスの他の値を取得するため、次のような新しい大きなマトリックスが得られます。

         AB-2000 AB-2600 AB-3500 AC-0100 AD-0100 AF-0200
AB-2000    5.5      NA     2.5    3.65   -17.96   -26.5
AB-2600     NA     7.18    NA      NA      NA      NA
AB-3500    2.5      NA     6.5     NA     -4.63    NA
AC-0100    3.65     NA     NA     4.22     9.8     NA
AD-0100  -17.96     NA    -4.63   9.8      5.9     NA
AF-0200  -26.5      NA     NA      NA      NA     4.28

より大きなマトリックスの値をオーバーライドするために使用している値のサブマトリックスがたくさんあるので、これを効率的に行う方法が必要です。何かご意見は?

4

1 に答える 1

1

すべてのマトリックスで行名と列名が等しいことを利用して、サブマトリックスに従って大きなマトリックスをサブセット化し、値を置き換えることができます。

X <- read.table(text="        AB-2000 AB-2600 AB-3500 AC-0100 AD-0100 AF-0200
AB-2000   6.5      NA    -1.8    3.65    -17.96  -26.5
AB-2600    NA     7.18    NA      NA       NA      NA
AB-3500  -1.79     NA     5.4     NA     -4.63     NA
AC-0100   3.65     NA     NA     4.22     9.8      NA
AD-0100 -17.96     NA    -4.63    9.8     5.9      NA
AF-0200 -26.5      NA     NA      NA       NA     4.28")
X

x1 <- read.table(text="        AB-2000 AB-3500
AB-2000    5.5    2.5
AB-3500    2.5    6.5")

X[rownames(x1),colnames(x1)] <- x1

結果:

> X
        AB.2000 AB.2600 AB.3500 AC.0100 AD.0100 AF.0200
AB-2000    5.50      NA    2.50    3.65  -17.96  -26.50
AB-2600      NA    7.18      NA      NA      NA      NA
AB-3500    2.50      NA    6.50      NA   -4.63      NA
AC-0100    3.65      NA      NA    4.22    9.80      NA
AD-0100  -17.96      NA   -4.63    9.80    5.90      NA
AF-0200  -26.50      NA      NA      NA      NA    4.28

複数の部分行列の場合、次のようにすることができます。

x2 <- read.table(text="        AB-2600 AC-0100
AB-2600    42    42
AC-0100    42    42") #Fake data

all.sub <- list(x1, x2)

for(x in all.sub) X[rownames(x),colnames(x)] <- x

> X
        AB.2000 AB.2600 AB.3500 AC.0100 AD.0100 AF.0200
AB-2000    5.50      NA    2.50    3.65  -17.96  -26.50
AB-2600      NA    42.1      NA   42.20      NA      NA
AB-3500    2.50      NA    6.50      NA   -4.63      NA
AC-0100    3.65    42.3      NA   42.40    9.80      NA
AD-0100  -17.96      NA   -4.63    9.80    5.90      NA
AF-0200  -26.50      NA      NA      NA      NA    4.28

[row,col]の最後の部分行列が繰り返し発生all.subすると、 の最終値になることに注意してXください。

于 2015-05-29T01:31:53.130 に答える