我有两个数据表。 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。
答案 0 :(得分:2)
尝试
>>sum(duplicated(df1[, c("chr_no", "pos", "ref"), with=FALSE]))
这将根据加入的密钥为您提供重复的总数。
>>table(duplicated(df1[, c("chr_no", "pos", "ref"), with=FALSE]))
这将根据加入的密钥为您提供重复记录和非重复记录的总数。
与其他数据框类似,
>>table(duplicated(ref_df[, c("chr_no", "pos", "ref"), with=FALSE]))