Konwertuj walutę przecinkami na cyfrę

Mam kolumnę w ramce danych w następujący sposób:

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

Jak to przerobić na to:

COL1
54345
65231
76234

Na początku próbowałem:

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

To nie zadziałało, ponieważ było napisane, że NA ' s zostały wprowadzone.

Potem próbowałem tak:

df$COL1<-as.numeric(gsub("\\$","",as.character(df$COL1)))
I to samo się stało. Jakieś pomysły?
Author: zx8754, 2015-08-11

4 answers

Powodem, dla którego gsub nie zadziałało było to, że w kolumnie było ,, która nadal nie jest numeryczna. Tak więc podczas konwersji na' Numeryczny ' z as.numeric, wszystkie elementy nie-numeryczne są konwertowane na NA. Musimy więc usunąć zarówno ,, jak i $, aby to zadziałało.

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

Dopasowujemy $ i , wewnątrz nawiasów kwadratowych ([$,]) tak, że będzie on uważany za znak ($ pozostawiony sam ma specjalne znaczenie, tzn. oznacza koniec łańcucha.) i zastąpić go ''.

Lub możemy uciec (\\) znak ($), aby dopasować go i zastąpić przez ''.

df1$COL1 <- as.numeric(gsub('\\$|,', '', df1$COL1))
 31
Author: akrun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-11 14:18:23

Możemy użyć parse_number z readr pakietu, który usuwa dowolne znaki nieliczbowe.

library(readr)
parse_number(df$COL1)
#[1] 54345 65231 76234
 44
Author: Ronak Shah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-08 06:44:27

Kolejna opcja używająca biblioteki stringr do usunięcia ' $ 'i', ' a następnie konwersji w następujący sposób:

df %>% mutate(COL1 = COL1 %>% str_remove_all("\\$,") %>% as.numeric())
 1
Author: charlehl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-23 09:40:19

Zagnieżdżony gsub do obsługi negatywów i transformacji, aby był funkcjonalny i aby korzystać z NSE

transform(df, COL1 = as.numeric(gsub("[$),]", "", gsub("^\\(", "-", COL1))))
 0
Author: hello_friend,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-02 10:58:01