R 在另一个数据帧中按名称子集一个数据帧

R 在另一个数据帧中按名称子集一个数据帧,r,R,我有一个非常大的参考文件,其中包含数千个对象(“OTU”)之间的数千个成对比较。数据帧的格式很长: data.frame': 14845516 obs. of 3 variables: $ OTU1 : chr "0" "0" "0" "0" ... $ OTU2 : chr "8192" "1" "8194" "3" ... $ gendist: num 78.7 77.8 77.6 74.4 75.3 ... 我还有一个小得多的子集,包含观察到的数据(结构略有不

我有一个非常大的参考文件,其中包含数千个对象(“OTU”)之间的数千个成对比较。数据帧的格式很长:

data.frame':    14845516 obs. of  3 variables:
 $ OTU1   : chr  "0" "0" "0" "0" ...
 $ OTU2   : chr  "8192" "1" "8194" "3" ...
 $ gendist: num  78.7 77.8 77.6 74.4 75.3 ...
我还有一个小得多的子集,包含观察到的数据(结构略有不同):

同样,它是对象的成对比较(“OTU”)。较小数据集中的所有对象也都在参考数据集中

我想减少引用,因为它只包含在较小的数据集中也可以找到的对象

以下是玩具数据:

library(reshape)
###reference
Ref <- cor(as.data.frame(matrix(rnorm(100),10,10)))
row.names(Ref) <- colnames(Ref) <- LETTERS[1:10]
Ref[upper.tri(Ref)] <- NA
diag(Ref) <- NA
Ref.m <- na.omit(melt(Ref, varnames = c('row', 'col')))
###query
tmp <- cor(as.data.frame(matrix(rnorm(25),5,5)))
row.names(tmp) <- colnames(tmp) <- LETTERS[1:5]
tmp[upper.tri(tmp)] <- NA
diag(tmp) <- NA
tmp.m <- na.omit(melt(tmp, varnames = c('row', 'col')))
Ref[rownames(tmp), colnames(tmp)]
库(重塑)
###参考文献

参考以下内容适用于我使用您的玩具数据:

library(reshape)
###reference
Ref <- cor(as.data.frame(matrix(rnorm(100),10,10)))
row.names(Ref) <- colnames(Ref) <- LETTERS[1:10]
Ref[upper.tri(Ref)] <- NA
diag(Ref) <- NA
Ref.m <- na.omit(melt(Ref, varnames = c('row', 'col')))
###query
tmp <- cor(as.data.frame(matrix(rnorm(25),5,5)))
row.names(tmp) <- colnames(tmp) <- LETTERS[1:5]
tmp[upper.tri(tmp)] <- NA
diag(tmp) <- NA
tmp.m <- na.omit(melt(tmp, varnames = c('row', 'col')))
Ref[rownames(tmp), colnames(tmp)]
这将(按名称)仅选择
Ref
中的行,这些行的名称也是
tmp
中的行的名称,列的名称也是如此

如果您想继续使用问题第一部分的
str
输出中的长格式,您可以使用以下内容:

data1[(data1$OTU1 %in% data2$OTU1) & (data1$OTU2 %in% data2$OTU2), ]
这里我正在创建一个逻辑向量,它指示参考数据帧(
data1
)的哪些行的
OTU1
条目位于
data2$OTU1
的某处,对于
OTU2
,它也是一样的。然后使用该逻辑向量选择
data1
的行