合并几个因子变量

时间:2012-06-11 17:58:02

标签: r merge r-factor

这是我之前提出的问题的后续行动:Combining Survey Items in R/ Recoding NAs

我有一个数据框,它有多个因子变量,我想把它们组合成一个变量。

ID      REGIONA REGIONB REGIONC
A        North     NA      NA
A        South     NA      NA
B        NA      East      NA
B        NA      West      NA
C        NA        NA     North
C        NA        NA     East

我希望组合数据框看起来像这样。

ID      REGION
A        North    
A        South     
B        East      
B        West      
C        North       
C        East     

使用上一篇文章中的技术within(df, x3 <- ifelse(is.na(x1), x2, x1))适用于数字,但似乎没有很好地处理这些因素。

2 个答案:

答案 0 :(得分:2)

您需要使用levels。有关详细信息,请查看?factor的帮助文件。

within(df, x3 <- ifelse(is.na(x1), levels(x2)[x2], levels(x1)[x1]))

或者用你的例子:

within(df, x3 <- ifelse(!is.na(REGIONA), 
                        levels(REGIONA)[REGIONA], 
                        ifelse(!is.na(REGIONB), 
                               levels(REGIONB)[REGIONB],
                               levels(REGIONC)[REGIONC])))

答案 1 :(得分:2)

 # Reproducing your data frame:

 DF <- data.frame(ID=rep(c('A', 'B', 'C'), each=2), 
                  REGIONA=c('North', 'South', rep('NA', 4) ),
                  REGIONB=c('NA', 'NA', 'East', 'West', 'NA', 'NA'),
                  REGIONC=c(rep('NA', 4), 'North', 'East'))

 # Your data frame contains levels, it is necessary that 'NA' becomes NA, so:

 DF[DF=='NA'] <- NA

 # Removing NA's
 ind <- apply(DF, 2, is.na)
 new <- data.frame(matrix(DF[!ind], nrow(DF)))
 colnames(new) <- c('ID', 'REGION')
 new
  ID REGION
1  A  North
2  A  South
3  B   East
4  B   West
5  C  North
6  C   East