R改变因子值

时间:2016-12-29 03:43:46

标签: 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

更改因子值的最简单方法是什么?我正在考虑将因子转换为字符串然后更改值并在之后转换为因子。

有什么建议吗?

1 个答案:

答案 0 :(得分: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