cov.wt(z)中的R编程错误:'x'必须仅包含有限值

时间:2014-07-24 17:41:36

标签: r date

我已经看了这么长时间了,并且还没有能够弄清楚如何使用我拥有的csv文件在R中运行主成分分析。我继续得到这个错误:

Error in cov.wt(z) : 'x' must contain finite values only

到目前为止我所拥有的只是

data <- read.csv("2014 07 24 Pct Chg Variables.csv")
pca <- princomp(data3, cor=T)

Error in cov.wt(z) : 'x' must contain finite values only

我的csv文件中有一些"",并尝试了

data2 <- apply(data, 1, f1)
data3 <- as.numeric(data2)

其中f1是一个函数,用于应用值为空的均值。

3 个答案:

答案 0 :(得分:12)

princomp.default无法处理NA值:

USArrests[3,2] <- NA

princomp(USArrests, cor = TRUE)
#Error in cov.wt(z) : 'x' must contain finite values only

您需要处理NA s:

princomp(na.omit(USArrests), cor = TRUE)
#works

或使用princomp.formula

princomp(~ ., data = USArrests, cor = TRUE)
#works too (by calling na.omit` per default)

答案 1 :(得分:5)

第一栏是日期..一旦我尝试了

pca <- princomp(data[2:21], cor=T)

它奏效了。

答案 2 :(得分:2)

确保只发送矩阵的数字部分。

data=read.csv("file.csv", sep="[if not sep by comma]", header=TRUE)      
#Calculate number of rows and col
rows<-length(data[,1])
cols<-length(data[1,])
#Remove header and save each column to a matrix
for ( i in 1:rows){
   for ( j in 1:cols){
       if(data[i,j]=="NA"){
         data[i,j]="0"
       }
   }
}
pca_a=princomp(data, cor=True, covmat=NULL, scores=TRUE)
#Print scree plot
require(graphics)
plot(pca_a)
#plot pca
biplot(pca_a)
#plot scores with labels
plot(pca_a$loadings[,1:2],type="n", main="Title", sub="A subtitle")
text(pca_a$loadings[,1],pca_a$loadings[,2],c("Var1","Var2","..."))

那应该有所帮助。这样您就可以将所有NA或其他内容更改为0。 如果没有很多,也可以删除包含字符串的行。