2016-08-10 30 views
0

私は2つのテーブルselectVDemとDTを持っています。2番目のテーブルとのマッチングに基づいてテーブルに新しいカラムを追加する

DTは、月 - 年と年の国を出てマーキングの列がありselectVDemは、次の見出しを持っているのに対し、

 Country MonthofDate Size Year 
    1: Benin 1997-01-01 18 1997 
    2: Benin 1997-02-01 18 1997 
    3: Benin 1997-03-01 18 1997 
    4: Benin 1997-04-01 18 1997 
    5: Benin 1997-05-01 18 1997 
    ---        
3506: Zimbabwe 2015-07-01 38 2015 
3507: Zimbabwe 2015-08-01 38 2015 
3508: Zimbabwe 2015-09-01 42 2015 
3509: Zimbabwe 2015-10-01 42 2015 
3510: Zimbabwe 2015-11-01 42 2015 

Year Country EqualityResources EqualityProtec PercentSufferage LocalGov RegionGov ExecCorrupt PolCorrupt 

私がEqualityResources EqualityProtec PercentSufferage LocalGov RegionGov ExecCorrupt PolCorrupt値を追加したいです年と国の値が一致する新しい列としてのDT表の終わり。 forループを使用せずにこれを行う方法はありますか?私はすでに2つの方法を試しました。

DT$EqualityResources <- subset(DT$Country == selectVDem$Country & DT$Year == `selectVDem$Year, select = EqualityResources)` 

これは私も関数を記述し、中に私の

エラーをエラーを与える適用する機能

getVDem <- function(vDemVal, country, year, vDem){ 
    result <- vDem[vDem$Country == country & vDem$Year == year,] 
    finalResult <- vDem$vDemVal 
    return(finalResult) 
} 

DT$EqualityResources <- apply(DT, 1, getVDem(selectVDem, DT$Country, `DT$Year,'EqualityResources'))#subset(selectVDem,DT$Country == Country & DT$Year == Year, select = EqualityResources)` 

を使用してみましたが、エラーに

Error in subset.default(DT$Country == selectVDem$Country & DT$Year == : 
    argument "subset" is missing, with no default 
In addition: Warning messages: 
1: In is.na(e1) | is.na(e2) : 
    longer object length is not a multiple of shorter object length 
2: In `==.default`(DT$Country, selectVDem$Country) : 
    longer object length is not a multiple of shorter object length 
3: In DT$Year == selectVDem$Year : 
    longer object length is not a multiple of shorter object length 

を引き起こしvDem $ Country:$演算子はアトミックには無効ですv医師

どうすればよいですか?

+0

マージのようですか? selectVDemの列を国と年に基づいてマージしようとしています - 私が間違っていれば私を修正してください –

+0

DTはselectVDemよりも多くの行を持っているので、マージできません。 selectVDemには1年分のローしかありません。しかし、私は、ベネルン1997のselectVDemから情報を取り出し、それを1997年にDTで12行すべてに追加することが可能かどうか疑問に思っています。 –

答えて

0

これを列で実行しようとすると、混乱が生じる可能性があります。 dplyrの関数のジョイン・グループを使用できます。おそらくleft_joinです。一致する列名を持つと、結合によって自動的に "by"引数が決定されますが、と一致しますが、一致する列名と異なる列の内容がある場合は注意してください。

library(dplyr) 
newDT <- left_join(DT, selectVDem) 

マージするleft_joinの利点は、あなたが左のオブジェクトに存在しない(あなたのケース年または国で)任意のカテゴリを、含まれていないということです。引数byを自動化することも利点になります。

関連する問題