我有data.frame包含几个因素,我想重命名所有这些因素的因子水平。 E.g:
mydf <- data.frame(col1 = as.factor(c("A","A",NA,NA)),col2 = as.factor(c("A",NA,NA,"A")))
mydf <- as.data.frame(lapply(mydf,addNA))
请注意,现实生活中的示例不仅仅包含两列。因此,我想使用apply将其他级别名称分配给所有这些列,就像在:
中一样levels(mydf$col1) <- c("1","0")
我尝试了以下但是没有用......
apply(mydf,1,function(x) levels(x) <- c("1","0"))
我并不感到惊讶它不起作用,但我现在没有更好的想法。我应该使用with
吗?
addNA
来解释这样一个事实:不再需要将NAs作为NAs处理。因此,我也想重新标记它们。
这不适用于Andrie的建议并返回以下错误消息:
labels = c("1", : invalid labels; length 2 should be 1 or 1
请注意,我更新了我的示例df。
答案 0 :(得分:8)
您可以使用bit
或data.table
包中的setattr()
来引用更改级别。这样可以避免复制整个数据集,因为你说你有很多列......
require(bit) # Either package
require(data.table) #
setattr(mydf[[1]],"levels",c("1","0"))
setattr(mydf[[2]],"levels",c("1","0"))
这可以在一个非常快的简单for
循环中完成。您有责任确保使用相同长度的向量替换水平向量,否则该因子可能不再有效。并且,您必须使用此方法替换整个级别向量。 data.table
中有一种内部方式可以通过引用替换特定的级别名称,但可能不需要那么远。