2

此处的应用程序将美国各州分组为区域。

group1 <- c("ME", "NH", "VT", "MA", "CT", "RI")
group2 <- c("FL", "GA", "AL", "MS", "LA")

我的数据看起来像:

SomeVar | State
---------------
300     | AL
331     | GA
103     | MA
500     | FL

我想根据上面的分组在数据中添加一个“区域”列,如下所示:

SomeVar | State | Region
------------------------
300     | AL    | 2
331     | GA    | 2
103     | MA    | 1
500     | FL    | 2

有没有一种直接的方法来根据分组分配因素?

4

3 回答 3

3
group1 <- c("ME", "NH", "VT", "MA", "CT", "RI")
group2 <- c("FL", "GA", "AL", "MS", "LA")

grouptab <- rbind(data.frame(State=group1,grp=1),
                  data.frame(State=group2,grp=2))
DF <- read.table(text="SomeVar  State
300      AL
331      GA
103      MA
500      FL",header=TRUE)

merge(DF,grouptab)

或更一般地说:

groupList <- list(group1,group2)
grouptab <- data.frame(State=unlist(groupList),
                       grp=rep(seq_along(groupList),
                               sapply(groupList,length)))

(可能还有其他方法可以做到这一点——我试过mapply但没能很快弄清楚)

我认为merge(例如all,,all.xall.y的合适论点将以各种方式处理缺失组案例。

于 2013-05-22T16:36:17.260 回答
1
group1 <- c("ME", "NH", "VT", "MA", "CT", "RI")
group2 <- c("FL", "GA", "AL", "MS", "LA")

DF <- read.table(text="SomeVar  State
300      AL
331      GA
103      MA
500      FL",header=TRUE)

DF$Region <- NA
DF$Region[DF$State %in% group1] <- 1
DF$Region[DF$State %in% group2] <- 2

#   SomeVar State Region
# 1     300    AL     2
# 2     331    GA     2
# 3     103    MA     1
# 4     500    FL     2
于 2013-05-22T16:33:06.273 回答
1

假设您的数据框被调用df并且所有状态都在第 1 组或第 2 组中,您可以这样做

df$region <- ifelse(df$state %in% group1, 1, 2)
于 2013-05-22T16:33:34.110 回答