2016-06-03 11 views
2

Ich habe einen Datensatz mit einer kategorialen Variablen Weather. Diese Variable hat 3 verschiedene Textwerte, d. H. "Trocken", "Drizzle" und "Regen".So erstellen Sie kategoriale Variablen aus Textwerten in R

Ich möchte eine andere Variable erstellen, der ich numerische Werte für diese Variablen zuweisen kann. Zum Beispiel Dry wird 1, Drizzle wird 2 und Rain wird 3 sein.

Als Nebeninformation wird die weather Variable verwendet, um Blockierung in Wassersystemen vorherzusagen, also werde ich dies in einer Art linearem Regressionsmodell verwenden.

+0

Sie können auch einen ähnlichen Beitrag (wenn auch nicht identisch) [hier] (http://stackoverflow.com/questions/37620926/using-dplyr-to-get-cumulative-count-by-group) – akrun

+0

möglich überprüfen duplizieren http://StackOverflow.com/questions/37 55473/what-is-an-efficient-way-to-map-unique-values-of-a-vector-to-sequential-integers – h3rm4n

Antwort

4

Wir können factor konvertieren und dann zwingen zu integer

as.integer(factor(df1$Weather, levels = c("Dry", "Drizzle", "Rain")) 
+1

Awesome ... danke für die Antwort mate ... –

+0

@SheikhUsman Kein Problem. Froh, dass es geholfen hat. – akrun

+0

@akrun, wundernd warum 'Spiel (df1 $ Wetter, c (" Dry "," Drizzle "," Regen "))' wäre nicht vorzuziehen? –

1

Sie können zu einem geordneten Faktor konvertieren und weisen keine Aufkleber an:

data <- data.frame(Weather = c("Drizzle", "Rain", "Drizzle", "Rain", "Dry")) factor(data$Weather, levels = c("Dry", "Drizzle", "Rain"), labels = c(1, 2, 3), ordered=TRUE)

Welche zurückkehren:

[1] 2 3 2 3 1 Levels: 1 < 2 < 3

Sie können auch über die Verwendung geordneter Faktoren in linearen Regressionsmodellen nachlesen. Diese Frage könnte ein guter Anfang sein: https://stats.stackexchange.com/questions/33413/continuous-dependent-variable-with-ordinal-independent-variable

3

Für das Protokoll, würde dies auch tun, um den Job:

match(df1$Weather, c("Dry", "Drizzle", "Rain")) 

Dies ist etwas schneller als @ akrun-Lösung (schon sehr schnell sowieso):

x <- sample(c("Dry", "Drizzle", "Rain"), 1e6, rep=T) 

microbenchmark::microbenchmark(
    as.integer(factor(x, levels = c("Dry", "Drizzle", "Rain"))), 
    match(x, c("Dry", "Drizzle", "Rain")) 
) 

Unit: milliseconds 
expr  min  lq  mean  median  
14.31158 18.13069 23.19702 20.98414 23.10840 
13.30326 16.00538 19.07544 17.59751 19.53679 
+0

danke vincent ... –

+0

du bist willkommen ;-) –