我在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
这取得了第一组得分的输出,并将它们重新匹配到框架,其中NAs填充了没有pca分数的所有位置,并且对有分数的变量进行匹配。任何想法?感谢。
答案 0 :(得分:2)
这感觉有点像黑客。那里可能有更好的解决方案。
这里的方法是创建一个最初充满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
答案 1 :(得分: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
操作),这些操作是从princomp
的{{1}}参数说明链接的。