2017-02-16 55 views
1

確保有填充數據框架柱除了在for循環使用它()語句中的優雅和快速的方式...最快的方式來實現我這

colors = (
    "#D53E4F" "#FC8D59" "#FEE08B" 
    "#FFFFBF" "#E6F598" "#99D594" "#3288BD" 
) 
n = 6277 
wxData = data.frame(
    x = numeric(n - 1), 
    y = numeric(n - 1), 
    z = numeric(n - 1), 
    c = character(n - 1), 
    stringsAsFactors = FALSE 
) 
for (j in 1 : n-1) { 
    wxData$x[j]  = xCoord[[1]][j] #"data.frame" 
    wxData$y[j]  = yCoord[[1]][j] #"data.frame" 
    wxData$z[j]  = dbz[[1]][j]  #"data.frame" 
    colorIndx  = which(wxData$z[j] == colorRanges) 
    wxData$c[j] = colors[colorIndx] 
} 

道歉,如果這是之前被問過,但我確實看過。

+0

你能用文字描述你的代碼是幹什麼的?這是一種比沒有註釋的代碼更加優雅和快速的溝通方式......也許可以給你沒有定義的對象定義'xCoord','yCoord','dbz','colorRanges'? – Gregor

+0

我對你爲什麼設置'n = 6277'也感到困惑,但是似乎只使用'n-1' ...爲什麼不''n = 6276'?不過,我認爲你的問題的答案是「匹配」。 – Gregor

+0

'for(j in 1:n-1)'is for'for(in in(1:n) - 1)',not for for(for in 1:(n-1))'。這是你的意圖嗎? – nrussell

回答

1

通常,給定的所提供的代碼是不可執行的,則循環在

which(values[j] == array) 

可以與一個線來取代,而不循環

match(values, array) 

例如:

values = c('a','a','b','c','b','a') 
array = c('a','b','c') 
match(values, array) 

# 1 1 2 3 2 1 
+0

非常感謝。 –

+0

不客氣。我是'match'功能的忠實粉絲。 –