我想要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