将字符矩阵转换为数字矩阵

编程入门 行业动态 更新时间:2024-10-26 22:18:10
本文介绍了将字符矩阵转换为数字矩阵的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有一个7 x 31字符矩阵,称为extra4,其结构如下所示:

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

我也尝试过

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

我也尝试过将矩阵更改为数据帧,然后再执行sapply(extra4, as.numeric),但这也不起作用,并且我还尝试将数据写为csv,但是输出最终包含非数字字符.

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()给出了以下内容:

> 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

推荐答案

这里根本没有问题,我尝试过的大多数选项都没有.您将得到警告,但它们与"NA"字符串有关,由于它们既不是NA也不是存储在字符串中的数字,R不知道该如何处理和更改这些到NA.这就是警告告诉您的全部.因此

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"

所有工作都对extra4的第22列中的"NA"值(或其变体)发出警告:

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

但是这些只是警告,在这种情况下可以忽略.如果他们给您带来麻烦,您可以将通话包裹在suppressWarnings()

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")

但这很危险,因为它将停止所有警告,而不仅仅是有关NA的警告.

but that is dangerous as it will stop all warnings, not just the one about the NAs.

更多推荐

将字符矩阵转换为数字矩阵

本文发布于:2023-10-27 03:46:25,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1532214.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:矩阵   转换为   字符   数字

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!