2013-10-21 36 views
15

fBasicsパッケージに.hex.to.decという関数があることがわかりました。16進数を10進数に変換するR

.hex.to.dec(a)を実行すると機能します。

私は、このような値からなる列samp_columnとデータフレームを持っている:私は.hex.to.dec(samp_column)を行うと

a373, 115c6, a373, 115c6, 176b3 

、私はこのエラーを取得する:私は.hex.to.dec(as.character(samp_column))を行うと

"Error in nchar(b) : 'nchar()' requires a character vector"

は、私がこれを取得エラー:

"Error in rep(base.out, 1 + ceiling(log(max(number), base = base.out))) : invalid 'times' argument"

これを行うstの方法?

+1

'strtoi'となります。あるいは遠くに: 'Rutils :: as.character.binmode'を実行してから、' as.numeric'を使って文字から数字に変換してください:-) –

+3

[あなたの質問のフォーマット方法]を読んでください(http://stackoverflow.com/editing-help)、次にあなたのデータを含む[再現可能な例を作る方法](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)を参照してください。 – Thomas

+0

ありがとう、カール!何らかの理由で、この機能は私のGoogle検索では表示されませんでしたが、実際にはうまく機能しているようです。 :)乾杯! –

答えて

24

整数に16進文字ベクトルを変換するために使用base::strtoi

strtoi(c("0xff", "077", "123")) 
#[1] 255 63 123 
+5

数値ベースでの変換は、適切なヘルプページを見つけるのが難しい作業の1つです。変換関数は、さまざまな名前の場所に散在しています。 '?hexmode'、'?as.hexmode'、 '?octmode'も参照してください。 –

+0

OK、*今*誰が短い回答を投稿していますか? :-)ピンボールの賞賛のためのPS thx。 –

+0

@CarlWitthoft ha!さて、ポイントを取った。私はこれを最低限の実行可能な例と考えていますが、あなたが言ったように、それは細かいラインのピンボールウィザードです。 :-) –

8

進<変換するシンプルかつ汎用的な方法があります - "C/C++の道" を使用して>他の形式:

V <- c(0xa373, 0x115c6, 0xa373, 0x115c6, 0x176b3) 

sprintf("%d", V) 
#[1] "41843" "71110" "41843" "71110" "95923" 

sprintf("%.2f", V) 
#[1] "41843.00" "71110.00" "41843.00" "71110.00" "95923.00" 

sprintf("%x", V) 
#[1] "a373" "115c6" "a373" "115c6" "176b3" 
1
は、

strtoi()の制限は31ビットです。上位ビットが設定された16進数は、NA

> strtoi('0x7f8cff8b') 
[1] 2139946891 
> strtoi('0x8f8cff8b') 
[1] NA 
+0

これは受け入れられた答えに対するコメントになるはずです。 – NoBackingDown

関連する問題