2017-04-03 52 views
1

我開始在R和我在這個掙扎......我希望如果你有人能指點我如何做到這一點...基本上我有兩個列表...結合陣列中的R如果列名匹配

List1 
2013 2014 2015 
3  16  6 

List2 
2010 2011 2012 2013 2014 2015 2016 2017 
201.5 268.5 106.0 205.0 392.0 348.0 307.0 64.0 

有了這兩個列表我想獲得這樣的事情....

List3 
2013 2014 2015 2016 2017 
205.0 392.0 348.0 0  0 

或者,這也可能是OK

List 3 
2013 2014 2015 
205.0 392.0 348.0 

我已經嘗試過創建一個矢量,但是我無法將年份Colname傳遞給它,任何想法我怎麼能得到我想要的結果?

在此先感謝,這是我使用的代碼......功能的

PREvsCOR=function(){ 
    start<- which(names(List2) == min(names(List1))) 
    fin <- which(names(List2) == max(names(List1))) 
    a <- vector(mode="numeric", length = (fin-start)+1) 
    for (i in 1:length(a)){ 
    a[i] <- List1[i]/List2[start] 
    start<- start+ 1 
    } 
    return(a) 
    } # fin de PREvsCOR 

輸出:

[1] 0.01463415 0.04081633 0.01724138 

如果我嘗試使用給名字列:

colnames(precor) <- names(list1) 

我得到這個錯誤:

Error in colnames<- (*tmp* , value = c("2013", "2014", "2015")) : attempt to set 'colnames' on an object with less than two dimensions

+0

你有一個'list'或'VECTOR'或' matrix'? – akrun

+0

我用得到列表1和列表2 ** ** Tapply我想返回一個列表對象 –

+0

爲了您'List3',你打算省略年之前* *的上市?我懷疑把它們存儲在一個data.frame中可能會更好:兩個列:'year'和'value'。從那裏你可以很容易地使用連接(base-R:['merge'](https://stat.ethz.ch/R-manual/R-devel/library/base/html/merge.html)或[' dplyr :: left_join'和家族](https://cran.r-project.org/web/packages/dplyr/vignettes/two-table.html))來管理你的設置。 – r2evans

回答

0

感謝您快速響應!欣賞它!

Ronak沙阿了我答案。其他想法可能也不錯,但這是最簡單的,也是我想要最好的方法。

我只是做了什麼,他說要創建另一個數組:

List2[match(names(List1), names(List2))] 

然後做我需要做的的計算:

list3 <- list1/List2[match(names(List1), names(List2))]