回答:
警告メッセージは、「タイプ」変数が因子にされ、「ランチ」が定義されたレベルではなかったためです。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"
data.frame()
これは、関数のデフォルト設定であるためです(そして、ほとんどのユーザーが大部分の時間に必要とするものであるため、デフォルトです)。
CSVファイルから直接読み取る場合は、次のようにします。
myDataFrame <- read.csv("path/to/file.csv", header = TRUE, stringsAsFactors = FALSE)
stringsAsFactors
- strings
複数である必要があります(@Coliban)
これは柔軟なアプローチであり、特にすべての場合に使用できます。
dataframe
は、以前の操作を適用して得られたものです(たとえば、ファイルをすぐに開いたり、新しいデータフレームを作成したりしない)。まず、非因数分解使用して、文字列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)
.xlsxファイルからデータを取得した場合、同様の問題が発生します。残念ながら、私はここで適切な答えを見つけることができませんでした。私はそれを他の人を助けるかもしれない以下のようにdplyrで自分で処理しました:
#install.packages("xlsx")
library(xlsx)
extracted_df <- read.xlsx("test.xlsx", sheetName='Sheet1', stringsAsFactors=FALSE)
# Replace all NAs in a data frame with "G" character
extracted_df[is.na(extracted_df)] <- "G"
ただし、と同様のパラメーターがないreadxl
パッケージでは処理できませんでしたstringsAsFactors
。そのため、xlsx
パッケージに移動しました。