使用条件逻辑更改R中的值

问题描述 投票:1回答:1

我有一个专辑数据集,我想将某些专辑的特定类型更改为更广泛的类型。

> 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中。我该如何解决这个问题?

r
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.