I have a 7 by 31 character matrix called extra4
and its structure looks like this:
> str(extra4)
chr [1:7, 1:31] "36.88 " " 45.48 " " 52.46 " " 111.31 " " 138.45 " " 121.09 " " 122.62" ...
- attr(*, "dimnames")=List of 2
..$ : chr [1:7] "1990" "1991" "1992" "1993" ...
..$ : chr [1:31] "1" "2" "3" "4" ...
After reading similar questions in SO I've tried the following but I've failed:
>matrix(as.numeric(unlist(extra4)),nrow=nrow(extra4))
Warning message:
In matrix(as.numeric(unlist(extra4)), nrow = nrow(extra4)) :
NAs introduced by coercion
and also I've tried
> class(extra4)<-"numeric"
Warning message:
In class(extra4) <- "numeric" : NAs introduced by coercion
> extra4<-apply(extra4, 1, as.numeric)
Warning messages:
1: In apply(extra4, 1, as.numeric) : NAs introduced by coercion
2: In apply(extra4, 1, as.numeric) : NAs introduced by coercion
3: In apply(extra4, 1, as.numeric) : NAs introduced by coercion
4: In apply(extra4, 1, as.numeric) : NAs introduced by coercion
5: In apply(extra4, 1, as.numeric) : NAs introduced by coercion
6: In apply(extra4, 1, as.numeric) : NAs introduced by coercion
7: In apply(extra4, 1, as.numeric) : NAs introduced by coercion
> extra4<-apply(extra4, 2, as.numeric)
There were 31 warnings (use warnings() to see them)
I've also tried changing the matrix to data frame and then doing sapply(extra4, as.numeric)
but this did not work either, and I've also tried writing the data as csv but somehow the output ends up including non-numeric characters.
It's strange because especially after doing the above, only some of the numbers are turned to numeric values. However, I'm sure that all elements are character, because when I compare those which are saved and those which are not, I get
> str(extra4[1,1])
chr "36.88 "
> str(extra4[1,2])
chr " 19.11 "
I'm also adding the following to show my data in more detail:
> dput(extra4)
structure(c("36.88 ", " 45.48 ", " 52.46 ", " 111.31 ",
" 138.45 ", " 121.09 ", " 122.62", " 19.11 ", " 27.97 ",
" 37.14 ", " 47.68 ", " 60.78 ", " 35.84 ", " 38.64",
" 56.21 ", " 74.94 ", " 92.3 ", " 118.62 ", " 138.13 ",
" 104.65 ", " 113.98", " 30.48 ", " 51.54 ", " 61.57 ",
" 99.87 ", " 80.9 ", " 84.97 ", " 99.34", "20.16 ",
" 24.76 ", " 27.76 ", " 37.53 ", " 50.53 ", " 28.8 ",
" 25.06", " 87.73 ", " 98.68 ", " 119.95 ", " 150.74 ",
" 214.35 ", " 118.5 ", " 129.19", " 32.36 ", " 36.52 ",
" 42.67 ", " 56.55 ", " 89.22 ", " 49.97 ", " 50.62",
"35.09 ", " 40.77 ", " 48.43 ", " 82.61 ", " 120.1 ",
" 72.43 ", " 76.69", " 47.21 ", " 67.25 ", " 78.62 ",
" 66.64 ", " 83.78 ", " 127.79 ", " 154.11", " 86.1 ",
" 127.59 ", " 164.43 ", " 249.32 ", " 312.01 ", " 272.09 ",
" 265.68", " 83.75 ", " 118.41 ", " 171.52 ", " 229.27 ",
" 241.63 ", " 201 ", " 213.01", " 36.63 ", " 52.1 ",
" 66.03 ", " 101.38 ", " 126.71 ", " 95.46 ", " 110.03",
" 57.5 ", " 75.72 ", " 101.31 ", " 147.5 ", " 171.01 ",
" 148.66 ", " 167.93", " 29.56 ", " 38.37 ", " 48.8 ",
" 65.5 ", " 84.77 ", " 75.2 ", " 81.27", " 77.28 ",
" 93.7 ", " 119.62 ", " 247 ", " 301.76 ",
" 222.52 ", " 244.46", " 45.6 ", " 54.32 ", " 87.81 ",
" 132.93 ", " 163.62 ", " 152.99 ", " 170.85", " 27.13 ",
" 36.96 ", " 48.94 ", " 80.01 ", " 124.07 ", " 93.49 ",
" 105.57", " 54.55 ", " 85.93 ", " 102.3 ", " 122.7 ",
" 168.36 ", " 151.79 ", " 169.65", " 86.19 ", " 121.82 ",
" 191.7 ", " 247.75 ", " 260.23 ", " 196.48 ", " 243.06",
"47.35 ", " 60.63 ", " 76.4 ", " 93.04 ", " 102.13 ",
" 98.29 ", " 86.27", " 10.93 ", " 13.33 ", " 16.82 ",
" 18.2 ", " 23.48 ", " 16.52 ", " 16.19", " NA ",
" NA ", " NA ", " NA ", " 69.46 ",
" 54.22 ", " 60.16", " 60.93 ", " 89.86 ", " 141.85 ",
" 207.9 ", " 182.79 ", " 159.1 ", " 159.46", " 15.37 ",
" 18.48 ", " 24.33 ", " 38.37 ", " 45.87 ", " 34.86 ",
" 31.96", " 34.05 ", " 40.1 ", " 55.02 ", " 58.31 ",
" 86.89 ", " 65.68 ", " 65.68", "1.51 ", " 0.93 ",
" 1 ", " 1.78 ", " 2.8 ", " 1.56 ",
" 1.41", " 27.15 ", " 31.37 ", " 39.46 ", " 40.33 ",
" 61.86 ", " 45.18 ", " 57.71", " 14.74 ", " 16.3 ",
" 25.06 ", " 31.74 ", " 37.39 ", " 27.18 ", " 30.49",
" 3.59 ", " 4.86 ", " 5.67 ", " 6.36 ",
" 7.6 ", " 4.8 ", " 5.5", "4.73 ", " 5.68 ",
" 7.3 ", " 8.53 ", " 11.03 ", " 8.44 ",
" 9.84", "16.76 ", " 24.83 ", " 32.66 ", " 46.22 ",
" 48.01 ", " 43.44 ", " 48.29"), .Dim = c(7L, 31L), .Dimnames = list(
c("1990", "1991", "1992", "1993", "1994", "1995", "1996"),
c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11",
"12", "13", "14", "15", "16", "17", "18", "19", "20", "21",
"22", "23", "24", "25", "26", "27", "28", "29", "30", "31"
)))
sessionInfo()
gave the following:
> sessionInfo()
R version 3.0.0 (2013-04-03)
Platform: x86_64-apple-darwin10.8.0 (64-bit)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] gdata_2.13.2
loaded via a namespace (and not attached):
[1] gtools_2.7.1 tools_3.0.0
numeric() function with the name of the given character matrix as its parameter and this will help the user to convert the character matrix to numeric vector and in the next step user has to call another function matrix() with the numeric vector (which was created by the as.
To convert character to numeric in R, use the as. numeric() function. The as. numeric() is a built-in R function that creates or coerces objects of type “numeric”.
To convert columns of an R data frame from integer to numeric we can use lapply function. For example, if we have a data frame df that contains all integer columns then we can use the code lapply(df,as. numeric) to convert all of the columns data type into numeric data type.
There isn't really a problem here at all, not with most options I tried. You are getting Warnings but these pertain to the "NA"
strings, which because they aren't NA
nor a number stored in a string, R doesn't know what to do with them and changes these to NA
. This is all the warning is telling you. Hence
apply(extra4, 2, as.numeric)
sapply(extra4, as.numeric)
class(extra4) <- "numeric"
storage.mode(extra4) <- "numeric"
all work and all warn about the " NA " values (or variants thereof) in column 22 of extra4
:
Warning message:
In storage.mode(m) <- "numeric" : NAs introduced by coercion
but these are just warnings and in this case can be ignored. If they trouble you, you could wrap the call in suppressWarnings()
> suppressWarnings(storage.mode(m) <- "numeric")
but that is dangerous as it will stop all warnings, not just the one about the NA
s.
I think you can just apply:
data.matrix(frame, rownames.force = NA)
Here more info: https://stat.ethz.ch/R-manual/R-devel/library/base/html/data.matrix.html
m <- matrix(data = c("1","2","3","4","5","6"), ncol = 2, nrow = 3)
class(m) <- "numeric"
If you have a character matrix m, i.e.
m <- matrix(data = c("1","2","3","4","5","6"), ncol = 2, nrow = 3)
Simply mapply as.numeric, i.e.
m <- mapply(m, FUN=as.numeric)
And use the data to reconstruct the matrix with the same dimensions as the original m matrix, i.e.
m <- matrix(data=m, ncol=2, nrow=3)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With