R语言 将字符矩阵转换为数字矩阵

2sbarzqh  于 2023-05-04  发布在  其他
关注(0)|答案(5)|浏览(168)

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

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

在阅读了类似的问题后,我尝试了以下方法,但失败了:

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

我还尝试将矩阵更改为 Dataframe ,然后执行sapply(extra4, as.numeric),但这也不起作用,我还尝试将数据写入csv,但不知何故,输出结果包含非数字字符。
这很奇怪,因为特别是在做了上面的事情之后,只有一些数字变成了数值。然而,我确信所有的元素都是字符,因为当我比较那些保存的和那些没有保存的,我得到

> str(extra4[1,1])
 chr "36.88  "
> str(extra4[1,2])
 chr " 19.11  "

我还添加了以下内容以更详细地显示我的数据:

extra4 <- matrix(
  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"
  ),
  nrow = 7L,
  ncol = 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
polhcujo

polhcujo1#

这里没有真正的问题,我试过的大多数选择都没有。你得到了Warnings,但这些都是"NA"字符串,因为它们不是NA,也不是存储在字符串中的数字,R不知道如何处理它们,并将它们更改为NA。这就是所有的警告告诉你。因此

apply(extra4, 2, as.numeric)
sapply(extra4, as.numeric)
class(extra4) <- "numeric"
storage.mode(extra4) <- "numeric"

extra4第22列中的所有工作和所有警告“NA”值(或其变体):

Warning message:
In storage.mode(m) <- "numeric" : NAs introduced by coercion

但这些只是警告,在这种情况下可以忽略。如果他们给您带来麻烦,您可以将呼叫打包到suppressWarnings()中。

> suppressWarnings(storage.mode(m) <- "numeric")

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

5q4ezhmt

5q4ezhmt2#

m <- matrix(data = c("1","2","3","4","5","6"), ncol = 2, nrow = 3)

class(m) <- "numeric"
0mkxixxg

0mkxixxg3#

我想你可以直接申请:

data.matrix(frame, rownames.force = NA)

更多信息:https://stat.ethz.ch/R-manual/R-devel/library/base/html/data.matrix.html

xsuvu9jc

xsuvu9jc4#

如果你有一个字符矩阵m,即

m <- matrix(data = c("1","2","3","4","5","6"), ncol = 2, nrow = 3)

简单地Map为.numeric,即

m <- mapply(m, FUN=as.numeric)

并且使用该数据来重构具有与原始m矩阵相同维度的矩阵,即

m <- matrix(data=m, ncol=2, nrow=3)
yhived7q

yhived7q5#

最简单的R基方法是:

m <- matrix(data = c("1","2","3","4","5","6"), ncol = 2, nrow = 3)

m <- apply(m, 2 ,as.numeric)

相关问题