2016-03-29 5 views
0

tidyr RでSPREAD_にNSEを使用して:次のデータセットを使用して

temp <- structure(list(
    GENDER = structure(c(1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 2L, 2L), 
        .Label = c("F", "M"), 
        class = "factor"), 
    EVERFSM_6 = c(0L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L), 
    `0001` = c(0, 11, 22, 33, 33, 55, 66, 77, 88, 0), 
    n = c(20L, 13L, 4L, 13L, 36L, 94L, 28L, 50L, 27L, 1L)), 
    .Names = c("GENDER", "EVERFSM_6", "0001", "n"), 
    class = c("tbl_df", "data.frame"), 
    row.names = c(NA, -10L)) 

そして私は、データを要約するために、次のspread_操作を実行しようとしている:

DiscID <- "0001" 
colID <- as.name(DiscID) 
cols <- c("GENDER", colID, "n") 

gender_results <- temp %>% 
    select_(.dots=cols) %>% 
    group_by_(.dots=cols[1:2]) %>% 
    summarise(gender_n = sum(n)) %>% 
    spread_(paste0("`",DiscID,"`"), "gender_n") %>% 
    rename(type = GENDER) 

しかし、それは言う:

Error: Key column '`0001`' does not exist in input. 

私は変数にrを使用しているので、_バージョンのselect_、group_by_、およびspread_を使用する必要があります列名を参照してください。所望の出力は、以下のコード化されたハードを使用することにより達成可能である:

spread(`0001`, gender_n) %>% 

    type  0 11 22 33 55 66 77 88 
    (fctr) (int) (int) (int) (int) (int) (int) (int) (int) 
1  F 20 13  4 36 94 28 NA NA 
2  M  1 NA NA 13 NA NA 50 27 

答えて

2

私はあなたのDiscIDは、すでにpasteに必要spread_で使用するためにOKではないと思います。これは役に立ちますか?

cols <- c("GENDER", colID, "n") 
gender_results <- temp %>% 
    select_(.dots=cols) %>% 
    group_by_(.dots=cols[1:2]) %>% 
    summarise(gender_n = sum(n)) %>% 
    spread_(DiscID, "gender_n") %>% 
    rename(type = GENDER) 
代わり

:それがないNSE vignette in dplyr

+0

から

cols <- list(~GENDER, colID, ~n) gender_results <- temp %>% select_(.dots=cols) %>% group_by_(.dots=cols[1:2]) %>% summarise(gender_n = sum(n)) %>% spread_(DiscID, "gender_n") %>% rename(type = GENDER) 

!しかし、今私はなぜspread_がこれを受け入れるのか混乱しますが、select_とgroup_by_は受け入れません。ありがとう! – pluke

+2

は、このような変数の組み合わせを使用する代わりに 'cols'を代わりに' list(〜GENDER、colID、〜n) 'として渡すことができます(dplyrのNSEビネットから) –

関連する問題