我有一个数据矩阵(900列和5000行),我想做一个主成分分析。
这个矩阵在excel中看起来很好(意味着所有的值都是定量的),但是当我在R中读取我的文件并尝试运行pca代码后,我得到了一个错误,说“以下变量不是定量的”,我得到了一个非定量变量的列表。
所以一般来说,有些变量是定量的,有些不是。看下面的例子。当我检查变量1时,它是正确的和定量的..(随机一些变量在文件中是定量的)当我检查变量2时,它是不正确的和非定量的..(随机一些变量像这样在文件中是非定量的)
> data$variable1[1:5]
[1] -0.7617504 -0.9740939 -0.5089303 -0.1032487 -0.1245882
> data$variable2[1:5]
[1] -0.183546332959017 -0.179283451229594 -0.191165669598284 -0.187060515423038
[5] -0.184409474669824
731 Levels: -0.001841783473108 -0.001855956210119 ... -1,97E+05
所以我的问题是,我怎样才能把所有的非量化变量变成量化变量呢?
使文件简短没有帮助,因为值本身是定量的。我不知道发生了什么。所以这里是我的原始文件〈-https://docs.google.com/file/d/0BzP-YLnUNCdwakc4dnhYdEpudjQ/edit的链接
我也尝试了下面给出的答案,但仍然无济于事。
让我来展示一下我到底做了什么
> data <- read.delim("file.txt", header=T)
> res.pca = PCA(data, quali.sup=1, graph=T)
Error in PCA(data, quali.sup = 1, graph = T) :
The following variables are not quantitative: batch
The following variables are not quantitative: target79
The following variables are not quantitative: target148
The following variables are not quantitative: target151
The following variables are not quantitative: target217
The following variables are not quantitative: target266
The following variables are not quantitative: target515
The following variables are not quantitative: target530
The following variables are not quantitative: target587
The following variables are not quantitative: target620
The following variables are not quantitative: target730
The following variables are not quantitative: target739
The following variables are not quantitative: target801
The following variables are not quantitative: target803
The following variables are not quantitative: target809
The following variables are not quantitative: target819
The following variables are not quantitative: target868
The following variables a
In addition: There were 50 or more warnings (use warnings() to see the first 50)
3条答案
按热度按时间g9icjywg1#
默认情况下,R将字符串强制为因子。这可能导致意外行为。请使用以下命令关闭此默认选项:
或者,您可以使用将因子强制为数值
nszi6y052#
R把你的变量当作因子,正如Arun所提到的。因此它产生了一个数据框架(实际上是一个列表)。有很多方法可以解决这个问题,一个是用下面的方法把它转换成一个数据矩阵;
现在您可以在矩阵上运行PCA。
编辑:
把这个例子再扩展一下,查理建议的第二部分就不起作用了。复制下面的会话,看看它是如何起作用的;
s1ag04yj3#
as.numeric(as.character(data$variable2[1:5]))
,先用as.character
得到因子变量标签的字符串表示,再用as.numeric
转换