使用合并时数据丢失

时间:2016-04-16 17:09:29

标签: r merge

我有一个df状态,我试图为每个状态添加lat,long值,以便我可以在地图上绘制每个状态的百分比值。当我使用合并时,如果我不使用

,我会得到并且空df
all=TRUE

或者我的lat数据缺失,数据本身的长值取决于我生成的x或y

加载我的df并添加列标题的代码

fileURL <- c("https://drive.google.com/open?id=0B-jAX5hT2D3hNnVtLVhROENKRGs")
suppressMessages(require(data.table))
ge.planted <- fread(fileURL, na.strings = "NA")
colnames(ge.planted) <- c("region", "type", "crop", "2000", "2001", "2002", "2003", "2004", "2005", "2006", "2007", "2008", "2009", "2010", "2011", "2012", "2013", "2014", "2015")

获取状态名称的代码,其中lat为每个状态中心的long值

snames <- data.frame(region=tolower(state.name), long=state.center$x, lat=state.center$y)

当我使用以下方法合并两个df时

snames <- merge(ge.planted, snames, by="region")

我得到了

[1] region long   lat    type   crop   2000   2001   2002   2003   2004   2005   2006   2007   2008   2009   2010  
[17] 2011   2012   2013   2014   2015 

或者如果我使用

snames <- merge( ge.planted, snames, by="region", all=TRUE)

我得到了我的价值但没有拉,长

  region                       type    crop 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013
1:  Alabama Insect-resistant (Bt) only  Cotton    -    -    -    -    -   10   10   10   18   13   11   18   17   12
2:  Alabama    Herbicide-tolerant only  Cotton    -    -    -    -    -   28   25   25   15   18    7    4   11    4
3:  Alabama     Stacked gene varieties  Cotton    -    -    -    -    -   54   60   60   65   60   76   75   70   82
4:  Alabama           All GE varieties  Cotton    -    -    -    -    -   92   95   95   98   91   94   97   98   98
5: Arkansas    Herbicide-tolerant only Soybean   43   60   68   84   92   92   92   92   94   94   96   95   94   97
6: Arkansas           All GE varieties Soybean   43   60   68   84   92   92   92   92   94   94   96   95   94   97
   2014 2015 long lat
1:    9    4   NA  NA
2:    6    3   NA  NA
3:   83   90   NA  NA
4:   98   97   NA  NA
5:   99   97   NA  NA
6:   99   97   NA  NA

最后用

snames <- merge(snames, ge.planted, by="region", all=TRUE)

我得到lat,很长但没有值

      region long lat type crop 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015
1    alabama  -87  33 <NA> <NA> <NA> <NA> <NA> <NA> <NA>   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
2     alaska -127  49 <NA> <NA> <NA> <NA> <NA> <NA> <NA>   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
3    arizona -112  34 <NA> <NA> <NA> <NA> <NA> <NA> <NA>   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
4   arkansas  -92  35 <NA> <NA> <NA> <NA> <NA> <NA> <NA>   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
5 california -120  37 <NA> <NA> <NA> <NA> <NA> <NA> <NA>   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
6   colorado -106  39 <NA> <NA> <NA> <NA> <NA> <NA> <NA>   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA

从最好的情况来说,我可以告诉而不是基于&#39;区域&#39;来合并文件。它附加了&#39; y&#39;值到数据框的末尾。

1 个答案:

答案 0 :(得分:0)

问题是你使用了tolower(),因此一帧中的区域名称与另一帧中的区域名称不同(ge.planted有大写,而snames没有)。因此合并不会将区域名称识别为等效名称。删除tolower()调用,它应该可以工作。