我有一个从数据框中提取的子集矩阵,我怎样才能得到相应的行名?

问题描述 投票:0回答:3
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”?

r dataframe matrix subset
3个回答
2
投票

可以使用

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

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

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


0
投票

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

row.names(A)[A[,1] %in% B[,1] & A[,2] %in% B[,2]]
[1] "b" "d"
© www.soinside.com 2019 - 2024. All rights reserved.