1

我正在 R 中对缺少数据的向量进行主成分分析。我想从主成分中提取分数,并将值与原始帧中没有丢失的观察值匹配,但我不知道如何提取和匹配正确的标识符。例如:

x1 <- c(1,2,3,NA, 5,6,7)
x2 <- c(7,NA,6,NA, 4,3,2)

frame <- cbind(x1,x2)

pca_ob<- princomp(~frame)
pca_ob$score[,1]

这会产生以下输出:

    1         3         5         6         7 
  4.273146  2.104705 -0.715732 -2.125950 -3.536168 

我想根据标识符将 pca_ob$score[,1] 与原始帧绑定,并用 NA 填充其余部分,使其生成以下矩阵:

    x1 x2 x3
1    1  7  4.273146
2    2  NA NA
3    3  6  2.104705
4    NA NA NA
5    5  4  -0.715732
6    6  3  -2.125950
7    7  2  -3.536168

这将获取第一组分数的输出并将它们匹配回框架,其中 NA 填充所有没有 pca 分数的点并匹配有分数的变量。有什么想法吗?谢谢。

4

2 回答 2

2

这感觉有点像 hack。某处可能有更好的解决方案。

这里的方法是创建一个最初充满 NA 的新对象,然后将稀疏数据的名称转换为数字索引并使用它们进行分配。

> p1 <- pca_ob$scores[,1]
> p1
        1         3         5         6         7 
 4.273146  2.104705 -0.715732 -2.125950 -3.536168 
> z<-rep(NA, 7)
> z[as.numeric(names(p1))]<-p1
> z
[1]  4.273146        NA  2.104705        NA -0.715732 -2.125950 -3.536168
于 2013-08-20T06:28:02.710 回答
1

我想你正在寻找na.exclude

> princomp(~frame, na.action = na.exclude)$scores
     Comp.1      Comp.2
1  4.273146  0.24540178
2        NA          NA
3  2.104705 -0.30036459
4        NA          NA
5 -0.715732 -0.08790757
6 -2.125950  0.01832094
7 -3.536168  0.12454944

我在帮助页面中找到了这个na.omit(它也涵盖了其他NA操作),它是从princompna.action参数描述链接的。

于 2013-08-20T09:18:31.780 回答