在R中使用factoextra根据列值识别PCA得分
验证PCA得分与数据行的对应关系并按ID查找得分
核心逻辑
FactoMineR::PCA()生成的个体得分(ind$coord)严格保持与输入数据的行顺序一致,但可以通过绑定唯一ID的方式直观验证并方便后续按ID查询。
具体实现步骤(基于你的iris示例)
- 加载依赖包(注意
PCA()函数来自FactoMineR,factoextra是辅助可视化工具)
library(FactoMineR) library(factoextra)
- 生成带ID的数据集并完成PCA
# 添加唯一ID列(模拟你的Demonstrator.ID) iris$ID <- runif(150, 0, 100) # 执行PCA,排除Species和ID列 is.pca <- PCA(iris[, -c(5, 6)], scale.unit = TRUE, graph = FALSE)
- 合并得分与原数据的ID列
把PCA得分和原数据的ID绑定,得到带标识的得分数据框:
# 提取个体得分 pca_scores <- as.data.frame(is.pca$ind$coord) # 绑定原数据的ID列(确保行顺序一致) pca_scores_with_id <- cbind(iris$ID, pca_scores) # 重命名ID列方便识别 colnames(pca_scores_with_id)[1] <- "ID"
- 验证对应关系
通过对比原数据和得分数据框的行确认对应性:
# 查看前3行的原数据ID和得分数据框ID head(iris$ID, 3) head(pca_scores_with_id$ID, 3)
两者完全一致,说明得分与原数据行一一对应。
- 按ID查找特定得分
模拟你的"Demonstrator.ID"查询需求,查找目标ID对应的PCA得分:
# 假设要查找的目标ID(可替换为你的"Demonstrator.ID"值,比如"Dom Female G1") target_id <- pca_scores_with_id$ID[1] # 筛选对应得分 target_scores <- pca_scores_with_id[pca_scores_with_id$ID == target_id, ] print(target_scores)
扩展:直接关联原数据所有列
如果需要保留原数据的其他信息,也可以直接把得分合并到原数据框:
iris_with_pca <- cbind(iris, pca_scores) # 按ID筛选指定列 iris_with_pca[iris_with_pca$ID == target_id, c("ID", "Dim.1", "Dim.2")]
内容的提问来源于stack exchange,提问作者Kitt
相关产品推荐
相关产品推荐

