2015-04-18 126 views
1

如何填寫數據幀我有以下data.frame data基於矢量

data <- data.frame(matrix(0, ncol=4, nrow=4)) 
colnames <- seq(from = 6, to = 3, by = -1) 
names(data)<- sprintf("%.1f", colnames) 
rownames <- seq(from=5, to=2, by=-1) 
rownames(data) <- sprintf("%.0f", rownames) 

我有兩個向量,ab

a <- seq(11, 5, -1) 
b <- seq(0, 30, 5) 

a代表所有可能的和那列和行標題可以採用。例如,最西北的細胞是6+5=11

b表示我想填充到data.frame中的值。該訂單對應的訂單爲a。例如,data[1,1](行和列名稱總和爲11)應取值0data[1,2]data[2,1]都應該取值5

我該怎麼做呢?

我最初的想法是循環遍歷所有單元格,並檢查他們的行+列名稱總和是什麼,然後檢查這個總和是否在a中,如果是這樣,那麼抓住位置,然後轉到b並獲取基於位置,然後填寫它。這是正確的軌道?

+0

我不知道爲什麼你想有一個data.frame,而不是保持在這個例子中的矩陣。這樣做似乎沒有任何優勢。 對於你的問題,我建議看看'外'功能。 – JonMinton

回答

1

試試這個:

g <- outer(as.numeric(colnames(data)), as.numeric(rownames(data)), "+") 

g <- matrix(sapply(1:length(g), function(x) b[which(a==g[x])]), nrow=4) 
#  [,1] [,2] [,3] [,4] 
#[1,] 0 5 10 15 
#[2,] 5 10 15 20 
#[3,] 10 15 20 25 
#[4,] 15 20 25 30 

#For a data frame: 
g<- data.frame(g, row.names=rownames(data)); names(g) <- colnames(data) 
-1

所以(未測試),也許下面的工作。

output <- outer(X=a, Y=b, FUN="+") 

這將創建一個數組/矩陣。當然,如果你需要的話,然後強迫一個data.frame,但我不確定你爲什麼在上面的例子中。

+0

不知道爲什麼這是在幾分鐘後發佈的公認解決方案的核心時被低估的原因。 – JonMinton