以下是我的例子:
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 :(得分: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")
我没有测试过这个。