1

我已经阅读了许多相关的帖子,但似乎无法找到解决似乎应该是一个非常简单的问题的方法。我正在使用 R,我想将以下等式 x = R+2B 应用于我的数据框。我有一行 R,它是一个值 1:6 的向量,还有一行 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

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 回答
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 回答