Вы можете создать вектор, который свяжет указанные типы c с категориями, а затем заменить этот вектор своим фреймом данных. Например:
a <- c("Boy","Girl","Dog","Cat","Chair","Table")
b <- c(1:6)
df <- data.frame(a,b,stringsAsFactors = F) #Note, the stringsAsFactors = F
links <- c(
"Boy" = "Human",
"Girl" = "Human",
"Dog" = "Animal",
"Cat" = "Animal",
"Table" = "Object",
"Chair" = "Object"
)
df$Type <- links[df$a]
Вывод:
> df
a b Type
1 Boy 1 Human
2 Girl 2 Human
3 Dog 3 Animal
4 Cat 4 Animal
5 Chair 5 Object
6 Table 6 Object
Редактировать:
Если в людях, питомцах и объектах много значений, моё решение потребует набрав, например, ="human"
несколько раз. Вот способ создать справочную таблицу, которую, вероятно, легче масштабировать
links_A <- c(
"Boy" = "Human",
"Girl" = "Human",
"Dog" = "Animal",
"Cat" = "Animal",
"Chair" = "Object",
"Table" = "Object"
)
human <- c("Boy","Girl")
pet <- c("Dog","Cat")
object <- c("Chair","Table")
links_B <- rep(c("Human", "Animal", "Object"), times = lengths(list(human, pet, object)))
names(links_B) <- c(human, pet, object)
identical(links_A, links_B) # TRUE