我有一个数据集,其中包含特定办公室所在州的一列。我想选择该列并新建一个列,以表示该办事处位于美国哪个地区。 “州”列有每个州的邮政缩写(即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.abb
和state.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/