Remplacer des valeurs dans un dataframe basé sur la table de recherche

Je vais avoir quelques difficultés à remplacer les valeurs dans un dataframe. Je voudrais remplacer les valeurs basée sur une table séparée. Ci-dessous est un exemple de ce que je suis en train de faire.

J'ai un tableau où chaque ligne est un client et de chaque colonne est un animal qu'ils ont acheté. Appelons cette dataframe table.

> table
#       P1     P2     P3
# 1    cat lizard parrot
# 2 lizard parrot    cat
# 3 parrot    cat lizard

J'ai aussi un tableau que je vais de référence appelé lookUp.

> lookUp
#      pet   class
# 1    cat  mammal
# 2 lizard reptile
# 3 parrot    bird

Ce que je veux faire est de créer une nouvelle table appelée new avec une fonction remplace toutes les valeurs dans table avec le class colonne dans lookUp. J'ai essayé moi-même à l'aide d'un lapply fonction, mais j'ai eu des avertissements.

new <- as.data.frame(lapply(table, function(x) {
  gsub('.*', lookUp[match(x, lookUp$pet) ,2], x)}), stringsAsFactors = FALSE)

Warning messages:
1: In gsub(".*", lookUp[match(x, lookUp$pet), 2], x) :
  argument 'replacement' has length > 1 and only the first element will be used
2: In gsub(".*", lookUp[match(x, lookUp$pet), 2], x) :
  argument 'replacement' has length > 1 and only the first element will be used
3: In gsub(".*", lookUp[match(x, lookUp$pet), 2], x) :
  argument 'replacement' has length > 1 and only the first element will be used

Toutes les idées sur la façon de faire ce travail?

Devrait être en mesure de le faire avec cbind sur les deux colonnes de la rangée et de la colonne des indices. Voir ?"["

OriginalL'auteur jbunk | 2016-02-25