2013-05-29 23 views

答えて

150

警告メッセージは、「タイプ」変数が要因となり、「ランチ」が定義されたレベルではないためです。 "Type"を強制的に文字にするには、データフレームを作成するときにstringsAsFactors = FALSEフラグを使用します。

> fixed <- data.frame("Type" = character(3), "Amount" = numeric(3)) 
> str(fixed) 
'data.frame': 3 obs. of 2 variables: 
$ Type : Factor w/ 1 level "": NA 1 1 
$ Amount: chr "100" "0" "0" 
> 
> fixed <- data.frame("Type" = character(3), "Amount" = numeric(3),stringsAsFactors=FALSE) 
> fixed[1, ] <- c("lunch", 100) 
> str(fixed) 
'data.frame': 3 obs. of 2 variables: 
$ Type : chr "lunch" "" "" 
$ Amount: chr "100" "0" "0" 
+1

@デビッドなぜRファクターに変換しますか? – KannarKK

+1

それは 'data.frame()'関数のデフォルト設定である(そしてそれは、ほとんどのユーザーは、時間の大半を望むものであるので、それがデフォルトです)ので。 – David

34

CSVファイルから直接読み取っている場合は、このようにしてください。

myDataFrame <- read.csv("path/to/file.csv", header = TRUE, stringsAsFactors = FALSE) 
9

この柔軟なアプローチ、それは具体的には、すべての場合に使用することができます。

  1. あなただけにしたい1列、または
  2. data.frameをもたらしました影響を及ぼす以前の操作を適用した(例えば、すぐにファイルを開く、またはあなたのデータフレームを作成していません)。

まず、非因数分解as.character関数を使用して文字列、及び、その後、as.factor(又は単にfactor)と再因数分解機能:

fixed <- data.frame("Type" = character(3), "Amount" = numeric(3)) 

# Un-factorize (as.numeric can be use for numeric values) 
#    (as.vector can be use for objects - not tested) 
fixed$Type <- as.character(fixed$Type) 
fixed[1, ] <- c("lunch", 100) 

# Re-factorize with the as.factor function or simple factor(fixed$Type) 
fixed$Type <- as.factor(fixed$Type) 
3

これを修正する最も簡単な方法は、新しい要素を列に追加することです。レベルファンクションを使用して、いくつの要因があるかを判断し、新しい要因を追加します。

> levels(data$Fireplace.Qu) 
    [1] "Ex" "Fa" "Gd" "Po" "TA" 
    > levels(data$Fireplace.Qu) = c("Ex", "Fa", "Gd", "Po", "TA", "None") 
    [1] "Ex" "Fa" "Gd" "Po" " TA" "None" 
関連する問題