我有一些看起来像这样的数据:
dfA <- data.frame("First Var Name" = rnorm(20,3),
"Second Var Name" = rnorm(20,5),
"Third Var Name" = rnorm(20,4),
"Fourth Var Name" = rnorm(20,4))
dfB <- data.frame(Grouping = c("A","B","B","A"),
Varname = c("First Var Name", "Second Var Name", "Third Var Name", "Fourth Var Name"))
我想在dplyr中使用dfB进行group_by
分组,将该组中变量的第一个主成分应用于dfA
。我尝试过像
dfC <- dfB %>%
group_by(Grouping) %>%
relevantvars <- .$Varname %>%
data.frame(`Grouping' = prcomp(dfA[,relevantvars])$x[,1])
然而,抓住变量名并将分组用作变量名已经证明是棘手的。我也尝试过与paste命令结合使用,但这也不起作用。这是我希望得到的:
dfC <- data.frame(A = prcomp(dfA[,c(1,4)])$x[,1], B = prcomp(dfA[,c(2,3)])$x[,1])
答案 0 :(得分:0)
你实际上不想要按这些变量进行分组;您想按名称对其值进行分组。如果您将dfA
重新整形为长形式,然后将每个PCA的必需数据嵌套为data.frames的列表列,您可以使用purrr::map
进行迭代,这样就更容易实现了。 (或者只是lapply
,如果你愿意的话)。您需要为[{1}}重新整形,在这种情况下prcomp
比unstack
更简单,这对于索引非常挑剔。
tidyr::spread