在 R 中使用 data.table 进行数据表连接
Scott Ritchie
Postdoctoral Researcher in Systems Genomics
# 使用任意方法,哪些细菌在两个站点都能找到?
site1_ecology[site2_ecology, on = .(genus)]

site1_ecology[site2_ecology, on = .(genus)]
Error in vecseq(f__, len__, if (allow.cartesian || notjoin ||
!anyDuplicated(f__, :
Join results in 12 rows; more than 10 = nrow(x)+nrow(i). Check for
duplicate key values in i each of which join to the same group in x over
and over again. If that's ok, try by=.EACHI to run j for each group to
avoid the large allocation. If you are sure you wish to proceed, rerun
with allow.cartesian=TRUE. Otherwise, please search for this error message
in the FAQ, Wiki, Stack Overflow and data.table issue tracker for advice.
allow.cartesian = TRUE 允许继续执行连接:
# data.table 语法
site1_ecology[site2_ecology, on = .(genus), allow.cartesian = TRUE]
# merge()
merge(site1_ecology, site2_ecology, by = "genus", allow.cartesian = TRUE)
site1_ecology[site2_ecology, on = .(genus), allow.cartesian = TRUE]
genus count method present i.method
1: Nitrosomonas 500 WGS TRUE WGS
2: Nitrosomonas 620 16S TRUE WGS
3: Nitrosomonas 500 WGS TRUE 16S
4: Nitrosomonas 620 16S TRUE 16S
5: Nitrosomonas 500 WGS TRUE Culture
6: Nitrosomonas 620 16S TRUE Culture
7: Rhizobium 360 WGS TRUE WGS
8: Rhizobium 300 16S TRUE WGS
9: Rhizobium 360 WGS TRUE 16S
10: Rhizobium 300 16S TRUE 16S
11: Rhizobium 360 WGS FALSE Culture
12: Rhizobium 300 16S FALSE Culture
缺失值(NA)会与其他缺失值匹配:

可用 !is.na() 过滤缺失值行
site1_ecology <- site1_ecology[!is.na(genus)]
site1_ecology
genus count method
1: Nitrosomonas 500 WGS
2: Rhizobium 360 WGS
site2_ecology <- site2_ecology[!is.na(genus)]
site2_ecology
genus present method
1: Nitrosomonas TRUE Culture
2: Rhizobium TRUE Culture
3: Azotobacter TRUE Culture
site1_ecology[site2_ecology, on = .(genus), mult = "first"]

children[parents, on = .(parent = name), mult = "last"]

duplicated():哪些行是重复的?
unique():将 data.table 过滤为唯一行
使用所有列的取值:
duplicated(site1_ecology)
FALSE FALSE FALSE FALSE
仅使用部分列:
duplicated(site1_ecology,
by = "genus")
FALSE TRUE FALSE TRUE

unique(site1_ecology, by = "genus")

fromLast = TRUE 将搜索方向改为从最后一行开始
duplicated(site1_ecology, by = "genus", fromLast = TRUE)
TRUE FALSE TRUE FALSE
unique(site1_ecology, by = "genus", fromLast = TRUE)

在 R 中使用 data.table 进行数据表连接