我已阅读过很多相关帖子,但似乎找不到解决方案似乎应该是一个非常简单的问题。我使用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
这是我尝试的,这是不对的。关于如何简单有效地做到这一点的任何想法?
提前谢谢。
答案 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;