我有一个专辑数据集,我想将某些专辑的特定类型更改为更广泛的类型。
> AlbumData$Genre
[1] Pop Rock Rock Soundtrack Rock Rock
[7] Soundtrack Rock Country Rock Pop Rock
[13] Pop Rock Rock Pop Soundtrack Pop
[19] Pop Rock Pop Rock Rock Rock
[25] Soundtrack Metal Grunge Rock Rock Metal
Levels: Country Grunge Metal Pop Rock Soundtrack
这是我调用我的Genre列时的输出。我想用“Rock”取代“Grunge”和“Metal”。另外,我想将“Soundtrack”和“Country”替换为“Other”。
我为我想要完成的第一个任务创建了这个条件逻辑语句
for(k in 1:30){if(AlbumData$Genre[k] == 'Metal' | AlbumData$Genre[k] == 'Grunge'){AlbumData$Genre[k] <- 'Rock'}}
这成功了。我改变它来完成我的第二个任务。
for(j in 1:30){if(AlbumData$Genre[j] == 'Soundtrack' | AlbumData$Genre[j] == 'Country'){AlbumData$Genre[j] <- 'Other'}}
所有我改变的是引号内部,但它不起作用,我得到以下错误。
In `[<-.factor`(`*tmp*`, j, value = "Other") :
invalid factor level, NA generated
多次。我认为这是因为“其他”早先没有在Levels中。我该如何解决这个问题?
这将添加额外的因素并替换
AlbumData$Original <- AlbumData$Genre
AlbumData$Genre[AlbumData$Genre %in% c("Grunge", "Metal")] <- "Rock"
levels(AlbumData$Genre) <- c(levels(AlbumData$Genre), "Other")
AlbumData$Genre[AlbumData$Genre %in% c("Soundtrack", "Country")] <- "Other"
如评论中所述,这些因素可以先转换为字符
AlbumData$char <- levels(AlbumData$Genre)[AlbumData$Genre]
AlbumData$char[AlbumData$char %in% c("Grunge", "Metal")] <- "Rock"
AlbumData$char[AlbumData$char %in% c("Soundtrack", "Country")] <- "Other"
AlbumData$char <- as.factor(AlbumData$char)