1
A=data.frame(Lat=(1:5),long=(6:10))
rownames(A)<-c("a","b","c","d","e")
B=matrix(c(2,7,4,9),nrow=2,ncol=2, byrow=TRUE)

如何从数据框 A 中获取矩阵 B 的相应行名“b”和“d”?

4

3 回答 3

2

可以使用row.match包中的功能prodlim,非常好用。它返回一个带有(第一个)匹配项的行号的向量,NA否则返回一个向量。您可以使用该向量(m在此示例中)来识别在A中找到匹配项的行名B

library(prodlim)
m <- row.match(A, B)
rownames(A)[!is.na(m)]
#[1] "b" "d"
于 2016-06-21T03:58:25.633 回答
2

如果我们按元素进行比较,则将 'A' 转换为matrix,检查元素是否为%in%B ,将逻辑向量转换为matrix,获取行索引which/arr.ind=TRUE并基于该查找行名。

row.names(A)[unique(which(`dim<-`(as.matrix(A) %in% B, dim(A)), arr.ind=TRUE)[,1])]
#[1] "b" "d"

或者,如果我们正在比较 'A' 和 'B' 中的对应列,我们可以使用mapply,获取rowSums,检查它是否为 2 并根据该索引查找行名。

row.names(A)[rowSums(mapply(function(x,y) x %in% y, A, as.data.frame(B)))==2]

或者我们可以paste将列放在一起并进行比较

row.names(A)[do.call(paste, A) %in% paste(B[,1], B[,2])]
#[1] "b" "d"

注意:所有这些方法都基于base R

于 2016-06-21T03:45:27.710 回答
0

您可以在基础 R 中尝试的另一种方法

row.names(A)[A[,1] %in% B[,1] & A[,2] %in% B[,2]]
[1] "b" "d"
于 2016-06-21T11:40:43.383 回答