2013-08-19 23 views
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 

這是我正在嘗試,這是不正確的。任何想法如何簡單而有效地做到這一點?

預先感謝您。

+0

2B [1:6]是什麼意思?什麼是B? – Fernando

+0

B是我的列名,其中包含值1:6。 R也是值爲1:6的列名稱。數據包含2列:R和B.這有意義嗎? –

回答

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

+0

輝煌。非常感謝。這工作,並會給我一些東西開始玩擴展。不勝感激! –

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 
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'。

相關問題