【问题标题】:prcomp "Error in colMeans(x, na.rm = TRUE) : 'x' must be numeric"prcomp "colMeans(x, na.rm = TRUE) 中的错误:'x' 必须是数字"
【发布时间】:2019-10-04 14:31:02
【问题描述】:

我是 R 的新手,目前正在尝试为项目创建 PCA 图。我在 excel 中创建了数据表,然后将其保存为 .csv 文件,我将其声明为变量,如下所示:

> har.lip <-read.csv("HData.csv", header=TRUE, sep=",")
> head(har.lip[, 1:3])
      NAME   NUM1     NUM80
1  IN-3  4.347214  8.247082
2  IN-4  3.666815  8.108210
3  IN-5  5.779208 12.329948
4  IN-7  6.205594 22.449827
5  IN-7  5.342581 10.762976
6  IN-3  4.538335  9.711204
> pca <- prcomp(har.lip)
Error in colMeans(x, na.rm = TRUE) : 'x' must be numeric

我已尝试根据自己的情况调整此处的其他解决方案,但它似乎不起作用。我一直在学习教程,但我可以使用一些额外的帮助。谢谢!

【问题讨论】:

  • 最终prcomp(har.lip[-1]) ?请将str(har.lip) 的输出放在您的问题中!

标签: r pca


【解决方案1】:

根据您的数据框,第一列似乎是一个字符串。 prcomp 不容忍字符串。你可以做的事情是:

har.lip <-read.csv("HData.csv", header=TRUE, sep=",")

# Coerce to matrix, remove the first column which has characters
har.lip_mat <- as.matrix(har.lip[ ,-1])

# run function on the matrix
pca <- prcomp(har.lip_mat)

这应该会给你想要的输出。

为了说明您的一些其他问题,这里有一个更广泛的代表:

library(dplyr)

# Make a data set that looks like yours
sim_data <- mtcars %>% 
    tibble::rownames_to_column(var = "id")

# Make your data set a matrix and remove non-numeric columns
sim_data_mat <- as.matrix(sim_data[ ,-1])

# Add row names to your matrix from original data ste
rownames(sim_data_mat) <- sim_data[ ,1]

# Keep complete cases only

sim_data_mat <- sim_data_mat[complete.cases(sim_data_mat),]

# Now run your 
prcomp(sim_data_mat)
``

【讨论】:

  • 非常感谢!我试图运行它,但遇到了这个错误: svd(x, nu = 0, nv = k) 中的错误:'x' 中的无限或缺失值 我的某些字段确实包含“0”值,但其他所有内容是数字
  • 这意味着您的数据中有一些NAs。您可以删除带有na.omit(har.lip_mat) 的那些(从理论上讲,它们随机丢失很重要)
  • 嗨!再次感谢你的帮助。我运行了它,它似乎可以工作,但是当我尝试使用 prcomp() 时仍然遇到同样的错误。
  • 好的,我终于让它工作了。表中似乎缺少一个值。对不起那个问题。我可以将每个项目的名称作为标签保留在 PCA 图中吗?
猜你喜欢
  • 2020-12-19
  • 2018-01-27
  • 2018-05-23
  • 2017-10-25
  • 2023-03-28
  • 2020-06-18
  • 2018-01-17
  • 2021-02-14
  • 1970-01-01
相关资源
最近更新 更多