web-dev-qa-db-ja.com

カンマを含む通貨を数値に変換する

次のようにデータフレームに列があります:

COL1
$54,345
$65,231
$76,234

どうすればこれに変換できますか:

COL1
54345
65231
76234

私が最初にそれを試した方法は:

df$COL1<-as.numeric(as.character(df$COL1))

NAが導入されたとのことなので、それはうまくいきませんでした。

それから私はこのようにそれを試しました:

df$COL1<-as.numeric(gsub("\\$","",as.character(df$COL1)))

そして、これは同じことが起こりました。

何か案は?

19
Nick

gsubが機能しない理由は、列に,があり、それがまだ数値ではないためです。したがって、as.numericを使用して「数値」に変換すると、すべての非数値要素がNAに変換されます。そのため、,$の両方を削除して機能させる必要があります。

df1$COL1 <- as.numeric(gsub('[$,]', '', df1$COL1))

角かっこ($)内の,[$,]を照合して、その文字と見なされるようにします($をそのままにすると、特別な意味があります。つまり、終わりを示します文字列の)。それを''に置き換えます。

または、文字(\\)をエスケープ($)して一致させ、''に置き換えることもできます。

df1$COL1 <- as.numeric(gsub('\\$|,', '', df1$COL1))
26
akrun

parse_number from readrパッケージ。数値以外の文字を削除します。

library(readr)
parse_number(df$COL1)
#[1] 54345 65231 76234
36
Ronak Shah

ストリンガーライブラリを使用して「$」と「、」を削除する別のオプションは、次のように変換します。

df %>% mutate(COL1 = COL1 %>% str_remove_all("\\$,") %>% as.numeric())
0
charlehl

単に:

  1. カンマを削除
  2. ドル記号を削除する
  3. 数値(または整数)に変換する

例えば。

library(dplyr)

"$54,345" %>% gsub(",", "", .) %>% gsub("\\$", "", .) %>% as.numeric()
# [1] 54345
0
stevec