我有一个名为extra4
的7 x 31字符矩阵,其结构如下:
> 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)
我也尝试将矩阵更改为数据框,然后执行sapply(extra4, as.numeric)
但这也不起作用,我也尝试将数据写为csv但不知何故输出最终包括非数字字符。
这很奇怪,因为特别是在完成上述操作后,只有部分数字转为数字值。但是,我确信所有元素都是字符,因为当我比较那些被保存的和那些不存在的元素时,我得到了
> str(extra4[1,1])
chr "36.88 "
> str(extra4[1,2])
chr " 19.11 "
我还要添加以下内容以更详细地显示我的数据:
> 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
答案 0 :(得分:27)
这里根本没有问题,不是我尝试的大多数选项。您收到的是警告,但这些字符串属于"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的警告。
答案 1 :(得分:5)
我认为您可以申请:
data.matrix(frame, rownames.force = NA)
更多信息,https://stat.ethz.ch/R-manual/R-devel/library/base/html/data.matrix.html
答案 2 :(得分:3)
如果你有一个字符矩阵m,即
m <- matrix(data = c("1","2","3","4","5","6"), ncol = 2, nrow = 3)
简单地映射为.numeric,即
m <- mapply(m, FUN=as.numeric)
并使用数据重建与原始m矩阵具有相同尺寸的矩阵,即
m <- matrix(data=m, ncol=2, nrow=3)
答案 3 :(得分:1)
最简单的基本 R 方法是:
m <- matrix(data = c("1","2","3","4","5","6"), ncol = 2, nrow = 3)
m <- apply(m, 2 ,as.numeric)
答案 4 :(得分:-1)
m <- matrix(data = c("1","2","3","4","5","6"), ncol = 2, nrow = 3)
class(m) <- "numeric"