PC1列缺少PCA旋转

问题描述 投票:1回答:1

我正在尝试对经典Iris数据集进行PCA。这是我的代码:

library(tidyverse)

x <- iris[,1:4] %>% as.matrix()
pca <- prcomp(x, scale. = TRUE)
summary(pca)

组件旋转具有Petal.Length,Petal.Width等的每个值。因此,我尝试了此操作:

as.data.frame(pca$rotation) %>% pivot_longer(-1, names_to = "components", values_to = "value")

我知道肯定有一个错误,因为pca$rotation是一个矩阵,并且以某种方式忽略了PC1。预期结果应为:

terms          value component 
   <chr>          <dbl> <chr>   
 1 Sepal.Length  0.521  PC1     
 2 Sepal.Width  -0.269  PC1    
 3 Petal.Length  0.580  PC1    
 4 Petal.Width   0.565  PC1    
 5 Sepal.Length -0.377  PC2    
 6 Sepal.Width  -0.923  PC2     
 7 Petal.Length -0.0245 PC2      
 8 Petal.Width  -0.0669 PC2      
 9 Sepal.Length  0.720  PC3      
10 Sepal.Width  -0.244  PC3      
11 Petal.Length -0.142  PC3      
12 Petal.Width  -0.634  PC3    
13 Sepal.Length  0.261  PC4     
14 Sepal.Width  -0.124  PC4    
15 Petal.Length -0.801  PC4      
16 Petal.Width   0.524  PC4
r tidyr pca
1个回答
0
投票

您的-1规范,其中要包括的变量不在第一列之内(您可能误读了行名称,这些名称通常被tidyverse机器忽略,作为第一列)。怎么样

pca$rotation %>%
    as.data.frame() %>%
    rownames_to_column("term") %>%
    as_tibble() %>%    ## cosmetic
    pivot_longer(starts_with("PC"), 
                 names_to = "components", 
                 values_to = "value")

© www.soinside.com 2019 - 2024. All rights reserved.