我有data.frame包含几个因素,我想重命名所有这些因素的因子水平.例如:
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))
Run Code Online (Sandbox Code Playgroud)
请注意,现实生活中的示例不仅仅包含两列.因此,我想使用apply将其他级别名称分配给所有这些列,就像在:
levels(mydf$col1) <- c("1","0")
Run Code Online (Sandbox Code Playgroud)
我试过以下但是没有用......
apply(mydf,1,function(x) levels(x) <- c("1","0"))
Run Code Online (Sandbox Code Playgroud)
我并不感到惊讶它没有用,但我现在没有更好的想法.我可以使用with吗?
编辑:我意识到我在这里过分简化了一些错误.我曾经addNA说过这样一个事实,那就是NA不应该再作为NAs处理了.因此,我也想重新标记它们.这不适用于Andrie的建议并返回以下错误消息:
labels = c("1", : invalid labels; length 2 should be 1 or 1
Run Code Online (Sandbox Code Playgroud)
请注意,我更新了我的示例df.
您可以使用setattr()包bit或参考来更改级别data.table.这样可以避免复制整个数据集,因为你说你有很多列......
require(bit) # Either package
require(data.table) #
setattr(mydf[[1]],"levels",c("1","0"))
setattr(mydf[[2]],"levels",c("1","0"))
Run Code Online (Sandbox Code Playgroud)
这可以在一个for非常快的简单循环中完成.您有责任确保使用相同长度的向量替换水平向量,否则该因子可能不再有效.并且,您必须使用此方法替换整个级别向量.有一种内部方法data.table可以通过引用替换特定的级别名称,但可能不需要那么远.
| 归档时间: |
|
| 查看次数: |
855 次 |
| 最近记录: |