我正在尝试对经典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
您的-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")
?