将行中每个值的函数应用于另一行中的所有值,附加结果

时间:2013-08-19 14:31:30

标签: r function loops apply sapply

我已阅读过很多相关帖子,但似乎找不到解决方案似乎应该是一个非常简单的问题。我使用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

这是我尝试的,这是不对的。关于如何简单有效地做到这一点的任何想法?

提前谢谢。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分: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

每列对应一行&#39; R&#39;