我有这个矩阵:
Catergory Reason Species
[1,] "Decline" "Genuine" "24"
[2,] "Improved" "Genuine" "16"
[3,] "Improved" "Misclassified" "24"
[4,] "Decline" "Misclassified" "16"
[5,] "Decline" "taxonomic" "24"
[6,] "Improved" "Taxonomic" "16"
[7,] "Decline" "Unclear" "24"
[8,] "Improved" "Unclear" "16"
我想将第三列设为数字,所以我尝试:
Reasonstats[,3]<-as.numeric(Reasonstats[,3])
它没有给我任何错误,但值仍然不是数字。如果我只是做
as.numeric(Reasonstats[,3])
它为我提供了一个数字列表,如果我这样做
Reasonstats[,3]<-2
它在2罚款。
谁能告诉我哪里出错?
谢谢
答案 0 :(得分:1)
要了解&#34;出了什么问题&#34;,您需要先阅读?matrix
的帮助页面,这会引导您访问?as.vector
的帮助页面。阅读?as.vector
,你会发现:
as.vector
,一个泛型,试图将其参数强制转换为模式mode
的向量(默认是强制转换为最方便的矢量模式)
了解这一点的几个例子:
A <- c(TRUE, TRUE, FALSE)
A
# [1] TRUE TRUE FALSE
mode(A)
# [1] "logical"
B <- c(TRUE, TRUE, 0)
B
# [1] 1 1 0
as.logical(B)
# [1] TRUE TRUE FALSE
mode(B)
# [1] "numeric"
C <- c(TRUE, FALSE, "zero")
C
# [1] "TRUE" "FALSE" "zero"
mode(C)
# [1] "character"
因此,了解as.vector
不能包含混合原子模式,我们可以得出结论:matrix
(基本上是一个vector
,其dim
属性指定了数量行和列)也不能包含混合原子模式。
阅读R中的更多存储结构,您将遇到data.frame
。 ?data.frame
的帮助页面将其描述为:
......一个类似矩阵的结构,其列可能有不同的类型(数字,逻辑,因子和字符等)。
因此,如果你想要一个像你所示的矩形表,但是有不同类型的列,你应该使用data.frame
,而不是matrix
。
假设您的matrix
为&#34; m&#34;,定义为:
m <- structure(
c("Decline", "Improved", "Improved", "Decline", "Decline",
"Improved", "Decline", "Improved", "Genuine", "Genuine",
"Misclassified", "Misclassified", "taxonomic", "Taxonomic",
"Unclear", "Unclear", "24", "16", "24", "16", "24", "16",
"24", "16"),
.Dim = c(8L, 3L),
.Dimnames = list(NULL, c("Catergory", "Reason", "Species")))
首先,将其转换为data.frame
:
m2 <- data.frame(m, stringsAsFactors=FALSE)
然后转换你的&#34;物种&#34;列到数字:
m2$Species <- as.numeric(m2$Species)
这是结果及其结构。
m2
# Catergory Reason Species
# 1 Decline Genuine 24
# 2 Improved Genuine 16
# 3 Improved Misclassified 24
# 4 Decline Misclassified 16
# 5 Decline taxonomic 24
# 6 Improved Taxonomic 16
# 7 Decline Unclear 24
# 8 Improved Unclear 16
str(m2)
# 'data.frame': 8 obs. of 3 variables:
# $ Catergory: chr "Decline" "Improved" "Improved" "Decline" ...
# $ Reason : chr "Genuine" "Genuine" "Misclassified" "Misclassified" ...
# $ Species : num 24 16 24 16 24 16 24 16