2016-04-26 18 views
2

Daten ‚abc‘ ist als unten -Set Faktoren als Strings bei der Verwendung von ifelse/if

Org_Region Dest_Region Org_City Dest_City 
WEST EAST BHI AAA 
NORTH WEST DEL BHI 
SOUTH EAST SHD AAA 
WEST NORTH BHI ABA 
NORTH NORTH DEL ABA 
SOUTH NORTH SHD ABA 
WEST NORTH BHI ABA 
WEST WEST BHI BHI 
NORTH SOUTH DEL ADB 
SOUTH SOUTH SHD ADB 

in den obigen Daten, ich möchte eine neue Spalte einzuführen namens ‚Region‘, die wie eine Excel-Formel sieht -

IF(Org_City=Dest_City,"Same City",IF(Org_Region= Dest_Region,"Same Region","Rest")) 

, wenn ich versuche, die unter Syntax -

abc$Region <- with(abc, ifelse(abc$Org_City == abc$Dest_City, "Same City", ifelse(abc$Org_Region == abc$Dest_Region, "Same Region", "Rest"))) 

die Fehler, die ich bekommen ist -

Fehler in Ops.factor (abc $ Org_City, abc $ Dest_City): Level-Sets von Faktoren sind verschiedene

+2

convert zuerst zum Zeichen und erneut versuchen. – Sotos

Antwort

3
abc[] <- lapply(abc, as.character) 
with(abc, ifelse(Org_City == Dest_City, "Same City", 
           ifelse(Org_Region == Dest_Region, "Same Region", "Rest"))) 
# [1] "Rest"  "Rest"  "Rest"  "Rest"  
#  "Same Region" "Rest"  "Rest"  "Same City" "Rest"  "Same Region" 

Randnotiz. Sie brauchen nicht den Datenrahmen für jede Variable angeben, wenn with

mit der Wenn wir Faktoren behalten wollen, dann:

ifelse(as.character(abc$Org_City) == as.character(abc$Dest_City), 
     "Same City", 
     ifelse(as.character(abc$Org_Region) == as.character(abc$Dest_Region), 
       "Same Region", "Rest")) 
+1

Sieht einfacher aus als meine Antwort ... Lernen während der Beantwortung von Fragen yay! –

+1

@DiegoAgher besten Weg zu lernen ist zu lehren :) – zx8754

+0

Vielen Dank! :) – SushantG

1

Versuchen Sie Folgendes: Zuerst von Faktor Zeichenfolge konvertieren:

dataframe$Org_Region = as.character(dataframe$Org_Region) 
dataframe$Dest_Region = as.character(dataframe$Dest_Region) 

dann eine Funktion definieren und verwenden sapply

define_region <- function(org_city,dest_city){ 
if(org_city == des_city){ 
Region = "Same city" 
} else{ 
Region = "Rest"} 
} 
dataframe$Region = sapply(dataframe$org_city,define_region,dataframe$dest_city,USE.NAMES = FALSE) 
Verwandte Themen