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

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

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

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

在 SO 中阅读了类似的问题后,我尝试了以下操作,但失败了:

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

发布评论

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

>www.elefans.com

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