这是一个看似简单的R问题,但我在这里看不到确切的答案.我有一个数据框(alldata),如下所示:
Case zip market
1 44485 0
2 44481 0
3 43210 0
Run Code Online (Sandbox Code Playgroud)
有超过350万条记录.
然后,我有第二个数据框,'zipcodes'.
market zip
1 44485
1 44486
1 44488
... ... (100 zips in market 1)
2 43210
2 43211
... ... (100 zips in market 2, etc.)
Run Code Online (Sandbox Code Playgroud)
我想基于alldata $ zip匹配zipcode数据框中的适当值,为每个案例返回alldata $ market的正确值.我只是在寻找正确的语法,并且像往常一样非常感谢帮助.
小智 13
既然你不计较market在列alldata,可以先剥离其关闭,并使用在合并列alldata,并zipcodes根据该zip使用列merge:
merge(alldata[, c("Case", "zip")], zipcodes, by="zip")
Run Code Online (Sandbox Code Playgroud)
该by参数指定了键标准,因此如果您有复合键,则可以执行类似操作by=c("zip", "otherfield").
另一个对我有用的选项非常简单:
alldata$market<-with(zipcodes, market[match(alldata$zip, zip)])
Run Code Online (Sandbox Code Playgroud)