这是我之前提出的问题的后续行动: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))
适用于数字,但似乎没有很好地处理这些因素。
答案 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