Nie rozumiem, dlaczego otrzymałem to ostrzeżenie.
> fixed <- data.frame("Type" = character(3), "Amount" = numeric(3))
> fixed[1, ] <- c("lunch", 100)
Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "lunch") :
invalid factor level, NA generated
> fixed
Type Amount
1 <NA> 100
2 0
3 0
data.frame()
funkcji (i jest to ustawienie domyślne, ponieważ większość użytkowników tego chce przez większość czasu).Jeśli czytasz bezpośrednio z pliku CSV, zrób to w ten sposób.
myDataFrame <- read.csv("path/to/file.csv", header = TRUE, stringsAsFactors = FALSE)
źródło
stringsAsFactors
-strings
musi być w liczbie mnogiej (@Coliban)Oto elastyczne podejście , które można zastosować we wszystkich przypadkach, w szczególności:
dataframe
otrzymano ze stosowania poprzednich operacji (np nie od razu otwarcia pliku , lub tworzenia nowej ramki danych).Najpierw rozfaktoryzuj ciąg za pomocą
as.character
funkcji, a następnie ponownie rozfaktoryzuj za pomocąas.factor
(lub po prostufactor
) funkcji: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)
źródło
Najłatwiejszym sposobem rozwiązania tego problemu jest dodanie nowego czynnika do kolumny. Użyj funkcji poziomów, aby określić, ile masz czynników, a następnie dodaj nowy współczynnik.
> 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"
źródło
Mam podobny problem z danymi pobranymi z pliku .xlsx. Niestety nie mogłem znaleźć tutaj właściwej odpowiedzi. Poradziłem sobie z tym samodzielnie za pomocą programu dplyr, jak poniżej, co może pomóc innym:
#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"
Jednak nie mogłem sobie z tym poradzić z
readxl
pakietem, który nie ma podobnego parametru dostringsAsFactors
. Z tego powodu przeniosłem się doxlsx
pakietu.źródło