我想要droplevels
数据框(请不要将此问题标记为重复:))。 鉴于所有可用的方法只有一个可行。我究竟做错了什么? 实施例:R数据框因子
> df = data.frame(x = (c("a","b","c")),y=c("d","e","f"))
> class(df$x)
[1] "factor"
> levels(df$x)
[1] "a" "b" "c"
方法1不工作:
> df1 = droplevels(df)
> class(df1$x)
[1] "factor"
> levels(df1$x)
[1] "a" "b" "c"
方法2不工作:
> df2 = as.data.frame(df, stringsAsFactors = FALSE)
> class(df2$x)
[1] "factor"
> levels(df2$x)
[1] "a" "b" "c"
方法3不工作:
> df3 = df
> df3$x = factor(df3$x)
> class(df3$x)
[1] "factor"
> levels(df3$x)
[1] "a" "b" "c"
方法4最后工作:
> df4 = df
> df4$x = as.vector(df4$x)
> class(df4$x)
[1] "character"
> levels(df4$x)
NULL
在工作时,我觉得方法4是最不优雅的。你能帮我调试吗?非常感谢
编辑:以下意见和答案:我想从一个数据帧删除因子结构,不仅droplevels
所以,当你说你要'droplevels'你真的只是意味着你要的因子变量转换为字符varaible。如果是这样,方法4是唯一系统正确的选择。 'droplevels'从一个因素中删除未观察到的水平,但在您的测试案例中,您会观察到所有水平,因此不会丢失任何东西。如果你不想让它们成为因素,可以使用'df = data.frame(x =(c(“a”,“b”,“c”)),y = c(“d”, “e”,“f”),stringsAsFactors = FALSE)。方法2不起作用,因为它们已经是当时的因素。什么*确切*是你的目标? – MrFlick 2014-09-22 17:26:47
@MrFlick,谢谢你的解释,不过还是很奇怪,方法2不行的 – MasterJedi 2014-09-22 17:31:01
@YujiaHu一点也不奇怪。如果你通过'as.data.frame',一个data.frame所做的就是调整class属性和(可能)行名。 – joran 2014-09-22 17:34:19