0

これは、私が以前に持っていた質問のフォローアップです。R/RecodingNAsでの調査項目の組み合わせ

1つの変数に結合したい複数の因子変数を持つデータフレームがあります。

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))数値に対しては機能しますが、要因をうまく処理できないようです。

4

2 に答える 2

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])))
于 2012-06-11T18:05:10.883 に答える
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
于 2012-06-11T19:19:07.530 に答える