[R] converting a character matrix into numeric....

Jeff Newmiller jdnewm|| @end|ng |rom dcn@d@v|@@c@@u@
Wed Apr 12 21:38:41 CEST 2023


Isn't this like trying to tie up the horse after it has left the barn? Why not figure all this out _before_ converting to xts?

On April 12, 2023 12:29:49 PM PDT, akshay kulkarni <akshay_e4 using hotmail.com> wrote:
>Dear Rui,
>                 Not working. I have entirely removed the column containing % but am still bootless:
>
>> head(coredata(INFYTX))
>     INFY Historical Data INFY Historical Data INFY Historical Data INFY Historical Data
>[1,] "47.26"              "44.28"              "47.56"              "44.28"
>[2,] "46.30"              "44.92"              "46.53"              "44.06"
>[3,] "45.82"              "47.27"              "47.50"              "45.63"
>[4,] "45.62"              "46.06"              "46.16"              "44.73"
>[5,] "45.05"              "46.28"              "46.50"              "44.77"
>[6,] "45.28"              "44.80"              "46.84"              "44.53"
>     INFY Historical Data
>[1,] "1805267"
>[2,] "1536300"
>[3,] "887774"
>[4,] "944036"
>[5,] "759898"
>[6,] "1185402"
>> class(coredata(INFYTX)) <- "numeric"
>> head(coredata(INFYTX))
>     INFY Historical Data INFY Historical Data INFY Historical Data INFY Historical Data
>[1,] "47.26"              "44.28"              "47.56"              "44.28"
>[2,] "46.3"               "44.92"              "46.53"              "44.06"
>[3,] "45.82"              "47.27"              "47.5"               "45.63"
>[4,] "45.62"              "46.06"              "46.16"              "44.73"
>[5,] "45.05"              "46.28"              "46.5"               "44.77"
>[6,] "45.28"              "44.8"               "46.84"              "44.53"
>     INFY Historical Data
>[1,] "1805267"
>[2,] "1536300"
>[3,] "887774"
>[4,] "944036"
>[5,] "759898"
>[6,] "1185402"
>
>THanking you,
>Yours sincerely,
>AKSHAY M KULKARNI
>
>________________________________
>From: Rui Barradas <ruipbarradas using sapo.pt>
>Sent: Thursday, April 13, 2023 12:46 AM
>To: akshay kulkarni <akshay_e4 using hotmail.com>; R help Mailing list <r-help using r-project.org>
>Subject: Re: [R] converting a character matrix into numeric....
>
>�s 19:57 de 12/04/2023, akshay kulkarni escreveu:
>> Dear members,
>>                              I have an xts object:
>>
>>> head(INFYTX)
>>             INFY Historical Data INFY Historical Data.1 INFY Historical Data.2
>> 2003-04-16 "47.26"              "44.28"                "47.56"
>> 2003-04-17 "46.30"              "44.92"                "46.53"
>> 2003-04-21 "45.82"              "47.27"                "47.50"
>> 2003-04-22 "45.62"              "46.06"                "46.16"
>> 2003-04-23 "45.05"              "46.28"                "46.50"
>> 2003-04-24 "45.28"              "44.80"                "46.84"
>>             INFY Historical Data.3 INFY Historical Data.4
>> 2003-04-16 "44.28"                "1805267"              "5.77%"
>> 2003-04-17 "44.06"                "1536300"              "-2.03%"
>> 2003-04-21 "45.63"                "887774"               "-1.04%"
>> 2003-04-22 "44.73"                "944036"               "-0.44%"
>> 2003-04-23 "44.77"                "759898"               "-1.25%"
>> 2003-04-24 "44.53"                "1185402"              "0.51%"
>>
>> But it is populated with character values and I want to convert them to numeric. THe following code doesn't work:
>>
>>> head(coredata(INFYTX))
>>       INFY Historical Data INFY Historical Data.1 INFY Historical Data.2 INFY Historical Data.3
>> [1,] "47.26"              "44.28"                "47.56"                "44.28"
>> [2,] "46.30"              "44.92"                "46.53"                "44.06"
>> [3,] "45.82"              "47.27"                "47.50"                "45.63"
>> [4,] "45.62"              "46.06"                "46.16"                "44.73"
>> [5,] "45.05"              "46.28"                "46.50"                "44.77"
>> [6,] "45.28"              "44.80"                "46.84"                "44.53"
>>       INFY Historical Data.4
>> [1,] "1805267"              "5.77%"
>> [2,] "1536300"              "-2.03%"
>> [3,] "887774"               "-1.04%"
>> [4,] "944036"               "-0.44%"
>> [5,] "759898"               "-1.25%"
>> [6,] "1185402"              "0.51%"
>>
>>> class(coredata(INFYTX))
>> [1] "matrix" "array"
>>> class(coredata(INFYTX)) <- "numeric"
>> Warning message:
>> In class(coredata(INFYTX)) <- "numeric" : NAs introduced by coercion
>>> class(coredata(INFYTX))
>> [1] "matrix" "array"
>>> head(coredata(INFYTX))
>>       INFY Historical Data INFY Historical Data.1 INFY Historical Data.2 INFY Historical Data.3
>> [1,] "47.26"              "44.28"                "47.56"                "44.28"
>> [2,] "46.3"               "44.92"                "46.53"                "44.06"
>> [3,] "45.82"              "47.27"                "47.5"                 "45.63"
>> [4,] "45.62"              "46.06"                "46.16"                "44.73"
>> [5,] "45.05"              "46.28"                "46.5"                 "44.77"
>> [6,] "45.28"              "44.8"                 "46.84"                "44.53"
>>       INFY Historical Data.4
>> [1,] "1805267"              NA
>> [2,] "1536300"              NA
>> [3,] "887774"               NA
>> [4,] "944036"               NA
>> [5,] "759898"               NA
>> [6,] "1185402"              NA
>>
>> Why is the coredata matrix not changing to numeric when the class is changed to numeric? How else to convert coredata into numeric?
>>
>> THanking you,
>> Yours sincerely,
>> AKSHAY M KULKARNI
>>
>>        [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>Hello,
>
>Those NA come from trying to coerce character strings with "%" to numeric.
>
>Try instead to first remove the unwanted characters.
>
>
>
>mat <- matrix(c(0.1, 0.2, "5.77%", "-2.03%"), ncol = 2L)
>
>mat[] <- apply(mat, 2, \(x) sub("%", "", x))
>class(mat) <- "numeric"
>mat
>#>      [,1]  [,2]
>#> [1,]  0.1  5.77
>#> [2,]  0.2 -2.03
>
>
>Hope this helps,
>
>Rui Barradas
>
>
>	[[alternative HTML version deleted]]
>

-- 
Sent from my phone. Please excuse my brevity.



More information about the R-help mailing list