2017-04-03 14 views
1

私はRで始まり、これで苦労しています...あなたの誰かがこれを行う方法について私にアドバイスできたら...私は基本的に2つのリストを持っています...列名が一致すれば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 

は、私がこのような何かを取得したいと思い、これらの2つのリスト....

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'または 'を持っていますかマトリックス? – akrun

+0

私はリストオブジェクトを返すと思う** Tapply **を使ってlist1とlist2を取得します –

+0

あなたの 'List3'では、リストされている*年前の*を省略するつもりですか?私は、 'year'と' value'の2つのカラムを持つdata.frameにこれらを格納するほうが良いかもしれないと思います。そこから、簡単にジョイン(base-R:['merge')(https://stat.ethz.ch/R-manual/R-devel/library/base/html/merge.html)、または[ dplyr :: left_join'とfamily(https://cran.r-project.org/web/packages/dplyr/vignettes/two-table.html))を使用してセットを管理します。 – r2evans

答えて

0

お返事ありがとうございます!感謝します!

ロナクシャーが私に答えました。他のアイデアも良いかもしれませんが、このアイデアは最もシンプルで、最良の方法を望んでいました。私は単に彼が別の配列を作成するために言ったことなかった

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

その後は私が行うために必要な計算でした:

list3 <- list1/List2[match(names(List1), names(List2))] 
関連する問題