У меня возникают некоторые проблемы с заменой значений в фрейме данных. Я хотел бы заменить значения на основе отдельной таблицы. Ниже приведен пример того, что я пытаюсь сделать.
У меня есть таблица, где каждая строка является клиентом, и каждый столбец является животным, которого они купили. Позволяет называть этот фрейм данных table
.
> table
# P1 P2 P3
# 1 cat lizard parrot
# 2 lizard parrot cat
# 3 parrot cat lizard
У меня также есть таблица, которую я буду ссылаться под названием lookUp
.
> lookUp
# pet class
# 1 cat mammal
# 2 lizard reptile
# 3 parrot bird
Я хочу создать новую таблицу с именем new
с функцией, заменяющей все значения в table
столбцом class
в lookUp
. Я сам пробовал это с помощью функции lapply
, но я получил следующие предупреждения.
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
Любые идеи о том, как сделать эту работу?