2017-10-13 14 views
1

8桁または9桁のデータを持つ数字(文字)の列があります。データポイントが9桁の場合は、最初の桁を削除します。私は、次のコマンドを使用しています:列内の一部のデータポイントの桁を削除するR

データフレームは「ファイル」であると8/9桁のデータを持つ列がhscode1であり、それは9桁の文字であるとき、最初の数字をドロップし、新しいカラムがある
file$hscode2 <- if (nchar(file$hscode1 >= 9)) { 

    file$hscode2 <- substr(file$hscode1,2,9) 

} 

hscode2

しかし、私は希望の結果を得ていません。助言がありますか?

ありがとうございました

+0

試し' ifelse(NCHAR(ファイル$ hscode1)> = 9、ストリング(ファイル$ hscode1,2,9)、ファイル$ hscode1) '、 > = 9 '' nchar(file $ hscode1> = 9)ではありません。 ' – missuse

答えて

1

バグがあると思います。それは次のようになります。

file$hscode2 <- if (nchar(file$hscode1) >= 9) { 

    file$hscode2 <- substr(file$hscode1,2,9) 

} 

書かれているように、あなたの関数は、それゆえの条件は常に希望、文字に変換する場合は、ブールは、ちょうど1つの文字になりますです「ファイル$ hscode1> = 9」でNCHARを実行していましたあなたが見ていた予期しない結果につながると思います。

+0

あなたのポイントを得ました。ありがとうございました! –

0

@missuseによって提案されたように、ifelse()はここで問題なく動作します。これは論理 `NCHAR(ファイル$ hscode1)で一般的に

file$hscode2 <- ifelse(nchar(file$hscode1 >= 9), # test 
         substr(file$hscode1, 2, 9), # value if true 
         file$hscode1) # value if false 
+0

ありがとう!これは動作します! –

関連する問題