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? 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))
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
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())
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))))
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