2013-05-29 11 views

Odpowiedz

150

Komunikat ostrzegawczy jest taki, że zmienna "Typ" została wprowadzona jako czynnik, a "obiad" nie był zdefiniowanym poziomem. Użyj flagi stringsAsFactors = FALSE podczas tworzenia ramki danych, aby wymusić "Typ" jako znak.

> 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

@David Dlaczego R przekształca go w czynnik? – KannarKK

+1

Ponieważ jest to ustawienie domyślne w funkcji 'data.frame()' (i jest domyślne, ponieważ jest to to, czego większość użytkowników chce większość czasu). – David

34

Jeśli czytasz bezpośrednio z pliku CSV, zrób to.

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

to na elastyczne podejście, może on być stosowany we wszystkich przypadkach, w szczególności:

  1. chcesz tylko wpłynąć jedną kolumnę lub
  2. z data.frame zaowocowało od zastosowania poprzednich operacji (np. nie od razu otwierając plik lub tworząc ramkę danych).

Najpierw un-rozkładać na czynniki łańcuch przy użyciu funkcji as.character, a następnie, ponownie rozkładać na czynniki z as.factor (lub po prostu factor) Funkcja:

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

The Najłatwiejszym rozwiązaniem jest dodanie nowego współczynnika do kolumny. Użyj funkcji poziomów, aby określić, ile masz czynników, a następnie dodaj nowy 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" 
Powiązane problemy