2014-11-14 4 views
0

Вот небольшой пример того, что я пытаюсь сделатьПолучение индекса строки из кадра данных

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 и т. д. Как только я определил эти значения, я хочу знать, в какой строке находится каждый элемент.

Например, первое значение x соответствует элементу в пятой строке первого столбца dat, второе значение x соответствует элемент во второй строке второго столбца dat, ect.

Я хочу, чтобы мой выход быть вектор, который выглядит следующим образом

vec<- c(5, 2, 4) 

ответ

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 
0

Это должно работать:

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

Если вы были дублированы элементы (например, в два раза число 11 в первой колонке), то это вернет список. В противном случае (как в этом примере) вы получаете простой вектор.

Смежные вопросы