我有一个专辑数据集,我想将某些专辑的特定类型更改为更广泛的类型。
> 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专栏时的输出。我想取代" Grunge"和"金属"与" Rock。"另外,我想替换#34; Soundtrack"和#34;国家"与"其他"。
我为我要完成的第一个任务创建了这个条件逻辑语句
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
多次。我认为这是因为&#34;其他&#34;之前没有在Levels中。我该如何解决这个问题?
答案 0 :(得分:1)
这将添加额外的因素并替换
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)