1

関連する多くの投稿を読みましたが、非常に単純な問題のように見えるものの解決策が見つからないようです。私は R を使用しており、次の方程式 x = R+2B をデータ フレームに適用したいと考えています。値 1:6 のベクトルである行 R と、同じ行 B があります。R[i]+2B[1:6] の値である新しいベクトルを作成したいと考えています。したがって、R 値ごとに 6 つの結果値が得られます。合計で、ベクトルに 36 個の値が含まれます。

> data
  R B
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6

> x <- matrix(ncol=6,nrow=6)
> for (i in nrow(data)){ 
+   x[i] = data$R[i]+(2*data[1:6,2])
 + }
Warning message:
In x[i] = data$R[i] + (2 * data[1:6, 2]) :
number of items to replace is not a multiple of replacement length

これが私が試みていることですが、正しくありません。これを簡単かつ効率的に行う方法について何か考えはありますか?

前もって感謝します。

4

3 に答える 3

0
sapply(data[, 'R'], function(x)x + 2*data[, 'B'])

     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    3    4    5    6    7    8
[2,]    5    6    7    8    9   10
[3,]    7    8    9   10   11   12
[4,]    9   10   11   12   13   14
[5,]   11   12   13   14   15   16
[6,]   13   14   15   16   17   18

各列は「R」の行に対応します。

于 2013-08-19T14:43:29.540 に答える
0

使用できますsapply

sapply(data$R, function(x)x + 2*data[1:6,"B"])

     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    3    4    5    6    7    8
[2,]    5    6    7    8    9   10
[3,]    7    8    9   10   11   12
[4,]    9   10   11   12   13   14
[5,]   11   12   13   14   15   16
[6,]   13   14   15   16   17   18

行列の代わりにベクトルが必要な場合は、次を使用できますas.vector

于 2013-08-19T14:42:40.200 に答える
0

あなたが探しているexpand.grid

data <- data.frame(R=1:6,B=1:6)
out <- expand.grid(data$R,2*data$B)
apply(out,1,sum)
 [1]  3  4  5  6  7  8  5  6  7  8  9 10  7  8  9 10 11 12  9 10 11 12 13 14 11
[26] 12 13 14 15 16 13 14 15 16 17 18
于 2013-08-19T14:42:49.677 に答える