2016-12-29 63 views
1

這是我的例子:[R變化因子值

phone_make_factor <- c('apple', 'samsung', 'lg') 
phone_make_string <- c('apple','samsung','lg') 
df <- data.frame(phone_make_factor, phone_make_string) 

df$phone_make_string <-as.character(df$phone_make_string) 

df[df$phone_make_string != 'apple' & df$phone_make_string != 'samsung', 'phone_make_string'] <- 'other' 

levels(df$phone_make_factor) <- c(levels(df$phone_make_factor), 'other') 
df[df$phone_make_factor != 'apple' & df$phone_make_factor != 'samsung', 'phone_make_factor'] <- 'other' 

的代碼的最後一行生成錯誤消息:

Error in `[<-.data.frame`(`*tmp*`, df$phone_make_factor != "apple" & df$phone_make_factor != : 
    missing values are not allowed in subscripted assignments of data frames 

什麼是改變因子值的最簡單的方法?我正在考慮將因子轉換爲字符串,然後更改值並在之後轉換爲因子。

有什麼建議嗎?

回答

0

您可以使用plyr包的revalue方法。這裏有一個例子:

library(plyr) 
revalue(x, c("beta"="two", "gamma"="three")) 

在你的情況,你可以這樣做:

revalue(df[df$phone_make_factor != 'apple' & df$phone_make_factor != 'samsung', 'phone_make_factor'], 'other') 

如果不工作,這可能是多一點可讀性:

revalue(df$col[!df$col %in% c("apple","samsung","phone_make_factor")],"other") 

我沒有測試這個。

Source