2

私は新しい R ユーザーで、列内の特定のレコードの名前を変更しようとするときに問題があります。

私のデータには、classcode や fish_tl などの名前の列があります。Classcode は文字値、fish_tl は数値です。

classcode='OCAL' で fish_tl<20 の場合、classcode の値を「OCALYOY」になるように名前を変更する必要があります。クラスコードの他のレコードを変更したくありません。

次のコードを実行しています。

data$classcode<-ifelse(data$classcode=='OCAL'& data$fish_tl<20,
                              'OCALYOY',data$classcode)

私の問題は「else」の側面にあるようです。コードは正常に実行され、期待どおりに「OCALYOY」が返されますが、クラスコードの他の値は数値に変換されています(ただし、そのフィールドのモードを見ると、それでも「文字」として返されます)。

私は何を間違っていますか?どうもありがとう!

4

2 に答える 2

0

Rがそれを性格だと考えていることを指摘しても、要因と性格の問題でつまずくかもしれません。とにかく、as.character()コードをラップすると問題が解決するようです:

> ifelse(data$classcode=='OCAL'& data$fish_tl<20,
+        'OCALYOY',as.character(data$classcode))
#-----
 [1] "BFRE"    "BFRE"    "BFRE"    "HARG"    "OCALYOY" "OYT"     "OYT"     "PFUR"   
 [9] "SPAU"    "BFRE"    "OCALYOY" "OCAL" 

そうでない場合は、テキスト表現の代わりにの出力を質問に追加することで、質問を再現可能にできますか?dput()

于 2012-10-08T21:41:33.597 に答える
0

あなたは他の部分を作ることができますas.character(data$classcode)ifelse引数のクラスに関していくつかの奇妙なセマンティクスがあり、それはあなたの要因をその基礎となる数値表現に変えています。 as.character文字値として保持します。

于 2012-10-08T21:39:43.043 に答える