2017-07-20 18 views
1

私は初心者で、R言語を探索しています。以下のdata.frameで作業していました。セックスベクトル値を逆にしたいと思います。すなわち 'F' - > 'M' と 'M' - > 'F'ベクトルの文字をR言語で反転するには?

sampleData 
     Age Height Sex 
Alex  25 177 F 
Lilly  31 163 F 
Mark  23 190 M 
Oliver 52 179 M 
Martha 76 163 F 
Lucas  49 183 M 
Caroline 26 164 F 

私は、次の3つの方法を試してみましたが、適切なアプローチを打つことができませんでした。

  1. FをMに、またはその逆に置き換えましたが、Vectorの実際の値には影響しません。

    レベル(セックス)[1] < - "F" レベル(セックス)[2] < - "M"

  2. 'はmapvalues' 機能が、それでもない変更を用いて以下試みました。

    ライブラリへ

  3. 変換後のセックス(= cで( "F"、= cに "M")( "M"、 "F")かられるsampleData $セックス、)(plyr) mapvalues行列を適用して 'solve'を適用しましたが、数値行列のみに適用できることを学びました。

    セックス< - as.matrix(セックス) は

($れるsampleDataセックスを)解決する誰かが反転文字を解決する上で私を支援していただけますか?!

+1

'df $ Sex < - chartr( 'FM'、 'MF'、df $ Sex)' – Sotos

+2

'因子(df $ Sex、levels = c(" F "、" M ")、labels = c(" M "、" F ")) –

+0

@Sotosとdocendoありがとうございます。どちらも完璧でした。しかし、Sotosはchartr関数の動作について私に洞察を与えてくれますか?非常に便利でした。 –

答えて

1

このような文ifelseを使用できます。

は簡単にするために、私は、類似のデータフレーム作成しました:

sampleData <- data.frame(Age = c(25,31,23,15), Height = c(177,163,190,163), Sex = c("M","F","F","M")) 

をそして、あなたはまた、それを変換する関数を書くことができifelse

sampleData$Sex <- ifelse(sampleData$Sex=="F","M","F") 
+1

@Lorenzoありがとうございました。 :) –

+0

@PradeepVaranasi問題ありません!だから今私の答えを受け入れる! ;-) –

1

を使用することができます。

convertChar <- function(vec){ 
    if(length(unique(vec))!=2) 
     stop("Vector has more or less than 2 unique values") 
    newChar <- ifelse(vec == unique(vec)[1],unique(vec)[2],unique(vec)[1]) 
    return(newChar) 
} 

convertChar(c("M","M","F","F")) 
+0

私の質問にお答えいただきありがとうございます。しかし、LOCと再利用性を考慮すると、上記の答えとコメントのものは簡単です。 –

関連する問題