以下是我尝试做的一个小例子
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)
答案 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