2013-09-24 2 views
0

У меня есть таблица с рангах:R - соответствующие векторы в таблице

Apple 1 
Banana 2 
Orange 3 
... 40 

где 1 является самым высоким, 40 является низший ранг.

Я вытягиваю векторы из другого источника, которые содержат что-либо от 1 до 4 записей, например.

c(apple,orange) 
c(apple,banana,orange) 
c(orange) 

Я хочу, чтобы соответствовать этим векторам с рангом, так с (оранжевым) легко, ранг = 3 но с (яблоко, банан, апельсин) должен получить самый низкий диапазон от всех значений, поэтому в этом случае 3.

Любые советы, оцененные.

ответ

1

Что-то вроде этого, возможно?

tab <- data.frame(
    fruit = c("apple","banana","orange"), 
    rank = 1:3 
) 

# fruit rank 
#1 apple 1 
#2 banana 2 
#3 orange 3 

vec1 <- c("apple","orange") 
vec2 <- c("apple","banana","orange") 
vec3 <- c("orange") 

tab$rank[max(match(vec1,tab$fruit))] 
#[1] 3 
tab$rank[max(match(vec2,tab$fruit))] 
#[1] 3 
tab$rank[max(match(vec3,tab$fruit))] 
#[1] 3 
+0

Большое вам спасибо за это, хорошее простенькое решение, спасибо, что нашли время, чтобы собрать такой яркий пример. – user2813132

+0

@ user2813132 добро пожаловать в SO! Подумайте о повышении и/или принятии ответа, если вы считаете, что он полезен и/или удовлетворяет поставленному вопросу. –

-1

e.g.

# let tab = your table 
x <- c(apple,banana,orange) 
lowest.rank <- min(sapply(x, function(x) tab[names(tab)==x]) 
Смежные вопросы