我有一个从数据框中提取的子集矩阵,如何获得相应的行名?

时间:2016-06-21 03:40:21

标签: r matrix dataframe subset rowname

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”?

3 个答案:

答案 0 :(得分:2)

如果我们比较元素,那么将'A'转换为matrix,检查元素是否为%in% B,将逻辑向量转换为matrix,用{获取行索引{1}}并在此基础上找到行名称。

which/arr.ind=TRUE

或者,如果我们要比较“A”和“B”中的相应列,我们可以使用row.names(A)[unique(which(`dim<-`(as.matrix(A) %in% B, dim(A)), arr.ind=TRUE)[,1])] #[1] "b" "d" ,获取mapply,检查它是否为2并根据该行查找行名称索引。

rowSums

或者我们可以将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"

答案 1 :(得分:2)

您可以使用row.match包中的函数prodlim,它非常易于使用。它返回一个行号为(第一个)匹配的向量,否则为NA。您可以使用该向量(在此示例中为m)来标识在A中找到匹配项的B的rownames。

library(prodlim)
m <- row.match(A, B)
rownames(A)[!is.na(m)]
#[1] "b" "d"

答案 2 :(得分:0)

您可以在基础R

中尝试的另一种方法
row.names(A)[A[,1] %in% B[,1] & A[,2] %in% B[,2]]
[1] "b" "d"
相关问题