【问题标题】:Data.Table Merge - Result is larger than input DatatablesData.Table Merge - 结果大于输入数据表
【发布时间】:2015-05-11 18:59:25
【问题描述】:

我有两个数据表。 df1, ref_df

内部结构如下:

Classes ‘data.table’ and 'data.frame':  10153986 obs. of  18 variables:
 $ chr_no        : chr  "1" "1" "1" "1" ...
 $ pos           : int  238 324 340 353 355 357 380 420 435 571 ...
 $ ref           : chr  "C" "A" "G" "T" ...
 $ id            : logi  NA NA NA NA NA NA ...
 $ alt           : chr  NA NA NA NA ...
 $ af            : num  NA NA NA NA 0.807 NA NA 0.877 NA 0.868 ...
 $ cases_hom     : int  NA NA NA NA 50 NA NA 58 NA 59 ...
 $ cases_het     : int  NA NA NA NA 15 NA NA 7 NA 6 ...
 $ cases_count   : int  NA NA NA NA 115 NA NA 123 NA 124 ...
 $ controls_hom  : int  NA NA NA NA 48 NA NA 55 NA 56 ...
 $ controls_het  : int  NA NA NA NA 13 NA NA 6 NA 5 ...
 $ controls_count: int  NA NA NA NA 109 NA NA 116 NA 117 ...
 $ cc_trend      : num  NA NA NA NA 0.812 ...
 $ cc_geno       : num  NA NA NA NA NA NA NA NA NA NA ...
 $ cc_all        : num  NA NA NA NA 0.492 ...
 $ cc_dom        : num  NA NA NA NA 0.491 ...
 $ cc_rec        : num  NA NA NA NA 1 NA NA 1 NA 1 ...
 $ cmh_p_val     : num  0.9267 0.0672 0.0279 0.3939 0.2522 ...
 - attr(*, ".internal.selfref")=<externalptr> 


Classes ‘data.table’ and 'data.frame':  9915916 obs. of  5 variables:
 $ chr_no  : chr  "10" "10" "10" "10" ...
 $ pos     : int  86 126 148 208 232 396 413 413 454 1173 ...
 $ snp_name: chr  "rs459413697" "rs446265986" "rs460495236" "rs437891922" ...
 $ ref     : chr  "G" "G" "T" "G" ...
 $ alt     : chr  "C,T" "A,T" "C,G" "T" ...
 - attr(*, ".internal.selfref")=<externalptr

我执行左外连接 all.x = TRUE 为:

merge(x = df1, y = ref_df, all.x = T,
                     by = c("chr_no" , "pos" , "ref"), suffixes=c(".study", ".ref")) 

生成的数据表是

> dim(result_data)
[1] 10154765       20
> sum(duplicated(df1))
[1] 0
> sum(duplicated(ref_df))
[1] 0

所以我不确定发生了什么。我调查了https://github.com/Rdatatable/data.table/issues/508 我正在使用最新的 data.table 1.9.5。

【问题讨论】:

  • 那么你会期待什么结果呢?
  • 检查连接列的重复,而不是所有列;并使用常规 data.table [ 运算符进行任何不是完全外部连接的连接以获得最大速度。

标签: r merge left-join data.table


【解决方案1】:

试试

>>sum(duplicated(df1[, c("chr_no", "pos", "ref")]))

这将为您提供基于加入键的重复总数。

>>table(duplicated(df1[, c("chr_no", "pos", "ref")]))

这将为您提供基于连接键的重复和非重复记录的总数。

对于其他数据框也是如此,

>>table(duplicated(ref_df[, c("chr_no", "pos", "ref")]))

【讨论】:

  • 谢谢@Ala。使用您的建议,我能够识别出我正在使用的数据中的一些错误,并且它确实有重复的行。问题已解决。 :)
猜你喜欢
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
  • 2018-04-25
  • 2014-07-17
相关资源
最近更新 更多