我有一个数据集,其中包含特定办公室所在州的一列。我想选择该列并新建一个列,以表示该办事处位于美国哪个地区。 “州”列有每个州的邮政缩写(即NY代表纽约),我使用的是美国人口普查局的“地区”。

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

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")
}


但我收到一条错误消息,指出|该操作不适用于字符。我应该使用其他功能吗?

最佳答案

我发布是为了节省人们的打字时间。作为基础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

关于r - 使用if/else语句创建新的变量列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27116779/

10-12 17:33
查看更多