【问题标题】:Loss of data when using merge使用合并时丢失数据
【发布时间】:2016-04-17 03:34:37
【问题描述】:

我有一个 df,其中包含我正在尝试为每个州添加 lat、long 值的状态,以便我可以在地图上为每个州绘制百分比值。当我使用合并时,如果我不使用,我会得到任何一个并清空 df

all=TRUE

或者我的数据本身的经纬度值缺失数据,这取决于我制作 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)

我得到了经纬度,但没有价值观

      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

据我所知,不是基于“区域”合并文件,而是将“y”值附加到数据帧的末尾。

【问题讨论】:

  • 我已经整理了 df 收集的年份和种植百分比
  • 您的帖子无法重现。您可以使用 dput() 在您的帖子中包含您的数据集(或一个子集,足以重现您的问题)。
  • Error in fread(url, na.strings = "NA") : Not positioned correctly after testing format of header row. ch='h'。 (将fileURL 替换为url 之后)。 packageVersion("data.table") 是‘1.9.6’
  • 修复了 fileURL 名称被截断的问题
  • 你的最后两行代码完全相同,但输出不同。

标签: r merge


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 2018-08-19
    相关资源
    最近更新 更多