2017-02-20 2 views
0

I는 다음과 같습니다 일부 데이터가 :조작으로 데이터 프레임에서 변수 이름을 사용

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")) 

내가, group_by 그룹화에 dplyr에서 DFB를 사용하려면 해당 그룹의 변수의 첫 번째 주성분 걸릴 것을 dfA에 적용됩니다. 나는 까다로운 입증 변수 이름을 잡는 변수 이름과 그룹을 사용하여, 그러나

dfC <- dfB %>% 
    group_by(Grouping) %>% 
    relevantvars <- .$Varname %>% 
    data.frame(`Grouping' = prcomp(dfA[,relevantvars])$x[,1]) 

같은 것을 시도했다. 나는 또한 붙여 넣기 명령과 함께 시도했지만, 그 중 하나를 작동하지 않았다. 여기에 내가 얻을 바라고 무엇 :

dfC <- data.frame(A = prcomp(dfA[,c(1,4)])$x[,1], B = prcomp(dfA[,c(2,3)])$x[,1]) 
+2

, 당신은 예를 들어, dplyr의 표준 평가 변종을 사용해야합니다 'group_by_'. [NSE 비 네트] (https://cran.r-project.org/web/packages/dplyr/vignettes/nse.html)를 참조하십시오. – alistaire

+0

또한 열을 공백으로 명명하면 엄청난 양의 backticks가 필요하므로 dplyr의 NSE는 다소 의미가 없습니다. – alistaire

+0

이것이 데이터가 R로 들어오는 방식입니다. dplyr을 사용하기 전에이 값을 변경할 수 있지만 가능한 한 원본 데이터를 모방하려고했습니다. NSE를 살펴 보겠습니다. – Almacomet

답변

0

당신은 실제로 그 변수에 의해 그룹에 싶지 않아; 값으로 이름을 그룹화하려고합니다. dfA을 긴 형식으로 바꾼 다음 각 PCA의 필수 데이터를 data.frames의 목록 열로 중첩하면 purrr::map을 사용하여 반복 할 수 있습니다 (또는 원하는 경우 lapply). 너비가 prcomp 인 경우 와이드로 다시 작성해야합니다.이 경우 unstacktidyr::spread보다 간단하며 인덱스에 대해 까다롭게 사용해야합니다. 당신이 문자 값으로 저장 변수 이름이있는 경우

library(tidyverse) 

set.seed(47) # make generated data reproducible 

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")) 

# unless you tell it not to, `data.frame` will replace spaces with periods, so update Varname 
dfB <- dfB %>% mutate(Varname = make.names(Varname)) 

dfC <- dfA %>% gather() %>% 
    left_join(dfB, by = c("key" = "Varname")) %>% 
    nest(-Grouping) %>% 
    mutate(pca = map(data, ~prcomp(unstack(.x, value ~ key))$x[, 1])) %>% 
    unnest(pca) %>% 
    unstack(pca ~ Grouping) 

dfC 
#>    A   B 
#> 1 -1.74340058 -0.80430828 
#> 2 -0.90015763 0.55121748 
#> 3 0.72162180 0.18540745 
#> 4 0.68609468 -0.11332615 
#> 5 -0.68003234 0.43964407 
#> 6 1.39659346 0.37532545 
#> 7 1.08617617 -1.44789829 
#> 8 0.61576966 -1.01015131 
#> 9 -1.09667280 -1.78978142 
#> 10 1.14931837 -0.16714979 
#> 11 1.02694416 -0.08245775 
#> 12 0.03852488 -0.83134735 
#> 13 0.05820030 -1.97289196 
#> 14 2.35215929 1.62823022 
#> 15 -0.38723810 2.24902954 
#> 16 -1.65000542 -0.43809477 
#> 17 0.19792790 0.47133845 
#> 18 -0.89921705 0.85804619 
#> 19 -0.88727866 1.01371806 
#> 20 -1.08532810 0.88545017 
관련 문제