I have a dataframe somewhat similar to the following:
> theDF
ID Ticker INDUSTRY_SECTOR VAR CVAR
1 1 USD CASH 0 0
12 2 ZAR CASH -181412.82055904 -301731.22832191
23 3 BAT SJ EQUITY Financial 61711.951234826 102641.162795691
34 4 HCI SJ EQUITY Financial 1095.16002541256 1821.50290513369
45 5 PSG SJ EQUITY Financial 16498.2192382422 27440.331617902
We see that these are all columns of characters:
> apply(theDF, 2, mode)
ID Ticker INDUSTRY_SECTOR VAR CVAR
"character" "character" "character" "character" "character"
I would like something that will ONLY change numeric type vectors to numeric ones. In principle, if it "looks" like a number, make it numeric, otherwise leave it. I cannot find anything in StackOverflow that does not require knowing the names or columns that you want to convert before starting work. This DF will not always be in the same order or have columns, so I need some dynamic way to check if the columns are “similar” to the numeric ones and make these columns numeric.
This (obviously) gives me a set of NA; s for character columns:
> apply(theDF, 2, as.numeric)
ID Ticker INDUSTRY_SECTOR VAR CVAR
[1,] 1 NA NA 0.00 0.000
[2,] 2 NA NA -181412.82 -301731.228
[3,] 3 NA NA 61711.95 102641.163
[4,] 4 NA NA 1095.16 1821.503
[5,] 5 NA NA 16498.22 27440.332
- , , :
> apply(theDF, 2, function(x) tryCatch(as.numeric(x),error=function(e) e, warning=function(w) x))
ID Ticker INDUSTRY_SECTOR VAR CVAR
[1,] "1" "USD CASH" "" "0" "0"
[2,] "2" "ZAR CASH" "" "-181412.82055904" "-301731.22832191"
[3,] "3" "BAT SJ EQUITY" "Financial" "61711.951234826" "102641.162795691"
[4,] "4" "HCI SJ EQUITY" "Financial" "1095.16002541256" "1821.50290513369"
[5,] "5" "PSG SJ EQUITY" "Financial" "16498.2192382422" "27440.331617902"
?
EDIT:
, ...
> apply(theDF, 2, mode)
ID Ticker INDUSTRY_SECTOR VAR CVAR
"character" "character" "character" "character" "character"
> sapply(theDF, mode)
ID Ticker INDUSTRY_SECTOR VAR CVAR
"character" "character" "character" "character" "character"
> apply(theDF, 2, class)
ID Ticker INDUSTRY_SECTOR VAR CVAR
"character" "character" "character" "character" "character"
> sapply(theDF, class)
ID Ticker INDUSTRY_SECTOR VAR CVAR
"character" "character" "character" "character" "character"