使用if / else语句创建一个新的变量列

时间:2014-11-25 00:31:31

标签: r if-statement

我有一个数据集,其中包含特定办公室所在州的列。我想拿一下这个专栏并制作一个新的专栏,表明该办事处位于美国的哪个地区。州列有每个州的邮政缩写(即NY代表纽约),我使用的是美国人口普查局的地区。

这是数据的模拟示例。我没有Region列,但我想创建它:

Store    State    Region
A        FL       South
B        NY       Northeast
C        CA       West
D        IL       Midwest
E        MA       Northeast

让我们更简单,让我们说我只想表示东北部的办事处。我使用了以下语法:

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

但是我收到一条错误消息,说明了|操作不适用于角色。我应该使用不同的功能吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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"

答案 2 :(得分:1)

您需要%in%运营商!

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

欢呼声