将字符串变量分组为R中的因子

时间:2013-05-22 16:28:05

标签: r

此处的申请是将美国各州划分为地区。

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

是否有直接的方法根据分组分配因子?

3 个答案:

答案 0 :(得分: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的适当参数(例如allall.xall.y)会以各种方式处理失踪组案件。

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

答案 2 :(得分:1)

假设您的数据框名为df并且所有状态都在第1组或第2组中,您可以执行

df$region <- ifelse(df$state %in% group1, 1, 2)