从数据框中检索行索引

时间:2014-11-14 18:57:33

标签: r dataframe

以下是我尝试做的一个小例子

x<-c(11,38,24)

z1<-c(26,42,23,61,11) 
z2<-c(52,38,82,99,74)
z3<-c(19,72,28,24,25)

dat<-data.frame(z1,z2,z3)

我想知道第一列dat的哪个值等于x的第一个元素,第二列dat的哪个值等于x的第二个值,依此类推。一旦我确定了这些值,我想知道每个元素在哪一行。

例如,x的第一个值与第一列dat的第五行中的元素匹配,x的第二个值与第二列dat的第二行中的元素相匹配,等等。

我希望我的输出是一个看起来像这样的矢量

vec<- c(5, 2, 4)

2 个答案:

答案 0 :(得分:0)

这应该有效:

sapply(1:length(x), function(j) which(x[j] == dat[, j]))

如果您有重复的元素(比第一列中的数字11的两倍),那么这将返回一个列表。否则(就像在这个例子中)你得到一个简单的向量。

答案 1 :(得分:0)

您可以使用mapply

mapply(function(a, b) which(a == b), dat, x)
# z1 z2 z3 
#  5  2  4 

要获得您想要的结果,请将USE.NAMES参数设置为FALSE

mapply(function(a, b) which(a == b), dat, x, USE.NAMES = FALSE)
# [1] 5 2 4