以下是一个工作示例:
pc <- prcomp(~ . - Species, data = iris, scale = TRUE)
Run Code Online (Sandbox Code Playgroud)
轴分数从组件中提取x; 因此,您可以使用以下方式写出(您没有说出要导出的方式):
write.csv(pc$x[, 1:3], "my_pc_scores.csv")
Run Code Online (Sandbox Code Playgroud)
如果要为这些分数(颜色和标签,不是与PCA相关的东西,而是您自己分配的东西)分配信息,则将它们添加到分数矩阵中,然后导出.在上面的例子中,有三个物种,每个物种有50个观测值.如果我们希望将这些信息与分数一起导出,那么这样的事情就可以了
scrs <- data.frame(pc$x[, 1:3], Species = iris$Species,
Colour = rep(c("red","green","black"), each = 50))
write.csv(scrs, "my_pc_scores2.csv")
Run Code Online (Sandbox Code Playgroud)
scrs 看起来像这样:
> head(scrs)
PC1 PC2 PC3 Species Colour
1 -2.257141 -0.4784238 0.12727962 setosa red
2 -2.074013 0.6718827 0.23382552 setosa red
3 -2.356335 0.3407664 -0.04405390 setosa red
4 -2.291707 0.5953999 -0.09098530 setosa red
5 -2.381863 -0.6446757 -0.01568565 setosa red
6 -2.068701 -1.4842053 -0.02687825 setosa red
Run Code Online (Sandbox Code Playgroud)
更新错过了关于RGB的观点.请参阅有关?rgb在R中指定此内容的方法,但如果您想要的只是RGB字符串,则更改上面的内容以使用类似的内容
Colour = rep(c("#FF0000","#00FF00","#000000"), each = 50)
Run Code Online (Sandbox Code Playgroud)
相反,您指定所需的RGB字符串.
princomp()和之间的本质区别prcomp()是用于计算PCA的算法.princomp()使用协方差或相关矩阵的特征分解,同时prcomp()使用原始数据矩阵的奇异值分解(SVD).princomp()仅处理数据中至少有样本(行)和变量(列)的数据集.prcomp()可以处理列数多于行数的数据和数据集.此外,根据您的用途,可能更重要,SVD优于特征分解,因为它具有更好的数值精度.
我用html5和画布标记了Q,希望那些专家可以提供帮助.如果您没有得到任何回复,请从Q中删除第3点,然后专门针对使用画布显示PC的主题开始新的响应,并参考此详细信息.