2013-09-24 50 views
0

我有行列的表:的R - 匹配矢量到表

Apple 1 
Banana 2 
Orange 3 
... 40 

其中1是最高的,40是最低等级。

我从其他来源提取包含1到4个条目的任何东西的矢量,例如,

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

欲这些载体与秩匹配,所以 C(橙色)是容易的,秩= 3 但C(苹果,香蕉,橘子)应该从所有的值的接收的最低范围内,所以在这种情况下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

例如,

# let tab = your table 
x <- c(apple,banana,orange) 
lowest.rank <- min(sapply(x, function(x) tab[names(tab)==x])