Вы можете просмотреть каждую строку dat
, найти соответствующую строку в ref
, а затем результатом будут все эти соответствующие строки.
t(
apply(dat, 1, function(x){
ind <- which.max(!is.na(x)) #index of first non-NA
ref[ref[,ind] == x[ind],] # row of ref which matches this value
})
)
# ref smbole name
# [1,] "r2" "kn" "knife"
# [2,] "r3" "fr" "door"
# [3,] "r1" "ts" "table_spoon"
# [4,] "r3" "fr" "door"
Используемые данные:
ref <- structure(c("r1", "r2", "r3", "ts", "kn", "fr", "table_spoon",
"knife", "door"), .Dim = c(3L, 3L), .Dimnames = list(NULL, c("ref",
"smbole", "name")))
# ref smbole name
# [1,] "r1" "ts" "table_spoon"
# [2,] "r2" "kn" "knife"
# [3,] "r3" "fr" "door"
dat <- structure(c("r2", "r3", NA, NA, "kn", NA, NA, NA, NA, "door",
"table_spoon", "door"), .Dim = c(4L, 3L), .Dimnames = list(NULL,
c("ref", "smbole", "name")))
# ref smbole name
# [1,] "r2" "kn" NA
# [2,] "r3" NA "door"
# [3,] NA NA "table_spoon"
# [4,] NA NA "door"