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

时间:2018-03-02 18:28:23

标签: r

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

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

1 个答案:

答案 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)