我有一个数据集,其中包含特定办公室所在州的列。我想拿一下这个专栏并制作一个新的专栏,表明该办事处位于美国的哪个地区。州列有每个州的邮政缩写(即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")
}
但是我收到一条错误消息,说明了|操作不适用于角色。我应该使用不同的功能吗?
答案 0 :(得分:6)
我发帖是为了节省人们的打字时间。作为基本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
答案 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")
欢呼声