İşte switch
ifadeyi kullanmanın bir yolu :
df <- data.frame(name = c('cow','pig','eagle','pigeon'),
stringsAsFactors = FALSE)
df$type <- sapply(df$name, switch,
cow = 'animal',
pig = 'animal',
eagle = 'bird',
pigeon = 'bird')
> df
name type
1 cow animal
2 pig animal
3 eagle bird
4 pigeon bird
Bunun bir dezavantajı, animal
her bir öğe için kategori adını ( vb.) Yazmaya devam etmeniz gerektiğidir . Kategorilerimizi aşağıdaki gibi tanımlayabilmek sözdizimsel olarak daha uygundur (çok benzer soruya bakın R'de bir veri çerçevesine nasıl sütun eklenir )
myMap <- list(animal = c('cow', 'pig'), bird = c('eagle', 'pigeon'))
ve bu haritayı bir şekilde "tersine çevirmek" istiyoruz. Kendi invMap işlevimi yazıyorum:
invMap <- function(map) {
items <- as.character( unlist(map) )
nams <- unlist(Map(rep, names(map), sapply(map, length)))
names(nams) <- items
nams
}
ve sonra yukarıdaki haritayı aşağıdaki gibi ters çevirin:
> invMap(myMap)
cow pig eagle pigeon
"animal" "animal" "bird" "bird"
Ve sonra, type
sütunu veri çerçevesine eklemek için bunu kullanmak kolaydır :
df <- transform(df, type = invMap(myMap)[name])
> df
name type
1 cow animal
2 pig animal
3 eagle bird
4 pigeon bird
dput()
b) tabanında R, dplyr, data.table, tidyverse ... kullanarak bir çözüm mü istiyorsunuz?