2012-07-18 52 views
18

我有一個函數,我定義了一個data.frame我使用循環來填充數據。在某些時候我得到的警告消息:更改stringsAsAsactor設置data.frame

警告消息: 1:在[<-.factor*tmp*,ISEQ,值= 「CHANGE」):的NAS產生

因此 無效因子水平,當我定義我的data.frame時,我想將選項stringsAsFactors設置爲FALSE,但我不明白該怎麼做。

我曾嘗試:

DataFrame = data.frame(stringsAsFactors=FALSE) 

也:

options(stringsAsFactors=FALSE) 

什麼是設置選項stringsAsFactors正確的方法是什麼?

+0

看到http://stackoverflow.com/questions/2851015/r-convert-data-frame-columns-from-factors-to-characters – GSee 2012-07-18 13:23:16

回答

26

這取決於你如何填充你的數據框,你沒有給出任何代碼。當構造新的數據幀,則可以做T是這樣的:

x <- data.frame(aName = aVector, bName = bVector, stringsAsFactors = FALSE) 

在這種情況下,如果例如aVector是一個字符向量,那麼數據幀列x$aName也將是一個字符向量,而不是一個因素。將它與現有的數據幀(使用rbindcbind或類似的)組合應該保留該模式。

當你執行

options(stringsAsFactors = FALSE) 

您更改全局默認設置。因此,在執行該行後創建的每個數據框都不會自動轉換爲因子,除非明確告知這樣做。如果您只需要避免在一個地方進行轉換,那麼我寧願不更改默認值。但是,如果這會影響代碼中的許多地方,那麼更改默認值似乎是個好主意。

還有一件事:如果你的向量已經是的一個因素,那麼上述都不會將它改回到字符向量。爲此,您應該使用as.character或類似的標準將其明確轉換回來。

+0

感謝您的'一件事'看起來我的錯誤來自於此。 – VincentH 2012-07-18 10:09:31