2014-11-25 109 views
2

我有一個數據集,其中包含特定辦公室所在的狀態列。我想拿這個專欄做一個新的專欄,表示該辦公室位於美國哪個地區。州立專欄有每個州的郵政縮寫(即NY代表紐約),我正在使用美國人口普查局的地區。使用if/else語句創建新變量列

這是一個模擬的數據示例。我沒有一個地區列,但我要創建它:

​​3210

讓我們更簡單,讓我們只說我想在東北僅表示辦公室。我用下面的語法:

stores$Northeast<-if(
     stores$state=="ME"|"NH"|"VT"|"MA"|"RI"|"CT"|"NY"|"PA"|"NJ"){ 
print("Northeast") 
} else{print("Non-northeast") 
} 

但我得到一個錯誤消息說|操作不適用於字符。我應該使用不同的功能嗎?

+1

謹防爲您所需的解決方案提供特定的方法。正如Data-Munger Guru所說:「告訴我你想做什麼,而不是你想怎麼做」 – 2014-11-25 02:10:35

回答

6

我發佈的保存人的打字時間的利益。已經有兩個向量可用作基礎R安裝的一部分,可用於非常高效地執行此操作:state.abbstate.region。如果你有一個命名向量,它可以通過名字作爲查找工具進行索引。他們都需要從要素轉換爲字符(和索引需要被取消因式分解以及):

# Do read `?states`. Hey, S was invented in the US, but why not some Yuropean constants? 
mock <-read.table(text="Store State  
A  FL  
B  NY  
C  CA  
D  IL  
E  MA  ",head=TRUE) 
stat <- as.character(state.region) 
> names(stat) <- as.character(state.abb) 

> mock$Region <- stat[as.character(mock$State)] 
> mock 
    Store State  Region 
1  A FL   South 
2  B NY  Northeast 
3  C CA   West 
4  D IL North Central 
5  E MA  Northeast 

如果你想「編輯」的區域分配,這樣做:

> stat["IL"] <- "Midwest" 
> mock$Region <- stat[as.character(mock$State)] 
> mock 
    Store State Region 
1  A FL  South 
2  B NY Northeast 
3  C CA  West 
4  D IL Midwest 
5  E MA Northeast 
+0

很高興知道。感謝您超越明顯。 – beroe 2014-11-25 04:32:09

1

您需要%in%運營商!

stores$Northeast <- ifelse(stores$state %in% c("ME", "NH", "VT", "MA", "RI", "CT", "NY", "PA", "NJ"), "Northeast", "Non-northeast") 

歡呼

+1

我試過了,但它給了我一個錯誤信息。它只是將所有內容編碼爲「非東北」。這是警告消息:警告消息: In if(crime06_07 $ State%in%c(「ME」,「NH」,「VT」,「MA」,「RI」,「CT」,: )長度> 1,只有第一個元素會被使用 – 2014-11-25 00:51:07

+0

謝謝!這有幫助! – 2014-11-25 01:09:05

+0

很酷!不客氣! – Athos 2014-11-25 01:21:41

2

你或許應該使用%in%運營商在這裏:

NE = c("ME","NH","VT","MA","RI","CT","NY","PA","NJ") 

if stores$state %in% NE { 
    print("Northeast") 
} else { 
    print("Non-northeast") 
} 

你也可以定義一個新的變量這種方式,特別是如果你要繼續定義其他地區:

stores$region = "Non-northeast" 
stores$region[stores$state %in% NE] = "Northeast"