Вот способ, который я считаю хорошим:
# first create some fake data that approximates your situation
set.seed(6933)
fruit_words <- c("apple", "orange", "banana", "pappels", "orong", "bernaner")
dat <- data.frame(fruit = sample(fruit_words, size=10, replace=TRUE),
stringsAsFactors=FALSE)
Создайте таблицу, связывающую каждое уникальное значение dat$fruit
с желаемой категорией / строкой, которую вы хотите заменить:
fruit_lkup <- c(apple="appl", orange="orng", banana="bnna",
pappels="appl", orong="orng", bernaner="bnna")
Затем используйте тот факт, что dat$fruit
содержит имена fruit_lkup
dat$fruit_clean <- as.character(fruit_lkup[dat$fruit])
И вот результат:
print(dat)
## fruit fruit_clean
## 1 pappels appl
## 2 orong orng
## 3 apple appl
## 4 banana bnna
## 5 apple appl
## 6 bernaner bnna
## 7 bernaner bnna
## 8 pappels appl
## 9 bernaner bnna
## 10 bernaner bnna
Так что на самом деле большая часть работы заключается в созданииобъект, который вы используете для поиска значений - fruit_lkup
.
Один из способов начать это просто использовать dput(unique(dat$fruit))
, затем вставить его в скрипт и начать предоставлять значения, которые вы хотите заменить.
Если существует слишком много уникальных значений, вы также можете записать уникальные значения в CSV, а затем вручную добавить значения, которые вы хотите заменить после них.Тогда вы могли бы прочитать (теперь) csv с двумя столбцами как фрейм данных (скажем, lookup_df
) и создать fruit_lkup
с fruit_lkup <- setNames(lookup_df$new_values, lookup_df$old_values)
. Мне показалось, что этот подход очень удобен для многихраз, в основном именно ту ситуацию, которую вы описываете.
Надеюсь, это поможет ~~