2つの変数でグループ化された観測数を与えるテーブルを公開する必要があります。このコードは正常に動作します。しかし、私はこれを機能に変えようとすると問題に遭遇しました。テーブルの機能の外dplyrとgroup_byを使用して独自の関数を書く - 変更された列名を使用する方法
コード::これは library(tidyverse)
tab1 <- mtcars %>% count(cyl) %>% rename(Total = n)
tab2 <- mtcars %>%
group_by(cyl, gear) %>% count %>%
spread(gear, n)
tab <- full_join(tab1, tab2, by = "cyl")
tab
# This is the output (which is what I want)
A tibble: 3 x 5
cyl Total `3` `4` `5`
<dbl> <int> <int> <int> <int>
1 4 11 1 8 2
2 6 7 2 4 1
3 8 14 12 NA 2
が機能
library(tidyverse)
tab1 <- mtcars %>% count(cyl) %>% rename(Total = n)
tab2 <- mtcars %>%
group_by(cyl, gear) %>% count %>%
spread(gear, n)
tab <- full_join(tab1, tab2, by = "cyl")
tab
# This is the output (which is what I want)
A tibble: 3 x 5
cyl Total `3` `4` `5`
<dbl> <int> <int> <int> <int>
1 4 11 1 8 2
2 6 7 2 4 1
3 8 14 12 NA 2
機能にこれを入れしようとする働き
私はdplyr_0.7.2
例使用mtcarsを使用していますtab1の場合:これは動作します
count_by_two_groups_A <- function(df, var1){
var1 <- enquo(var1)
tab1 <- df %>% count(!!var1) %>% rename(Total = n)
tab1
}
count_by_two_groups_A(mtcars, cyl)
A tibble: 3 x 2
cyl Total
<dbl> <int>
1 4 11
2 6 7
3 8 14
TAB2の最初の部分のための機能:それはこの時点までに動作しますが、...
count_by_two_groups_B <- function(df, var1, var2){
var1 <- enquo(var1)
var2 <- enquo(var2)
tab2 <- df %>% group_by((!!var1), (!!var2)) %>% count
tab2
}
count_by_two_groups_B(mtcars, cyl, gear)
A tibble: 8 x 3
Groups: (cyl), (gear) [8]
`(cyl)` `(gear)` n
<dbl> <dbl> <int>
1 4 3 1
2 4 4 8
3 4 5 2
4 6 3 2
5 6 4 4
6 6 5 1
7 8 3 12
8 8 5 2
列名は(CYL)及び(ギア)に変更されました。私は列名が変更されたので、spread()とfull_join()(または新しい列名を使用する他のもの)を引き継ぐ方法を理解できないようです。私。私はtidyeval方法で新しい列名を指定する方法を理解することはできません。私は成功せずに様々なことを試みました。
私はスクリプト内で統一スタイルを維持する価値があると思います。 tidyevalを働かせようとしているなら、小さな機能から始めるのが最善です。これらの理由から、元の質問に答えることが理にかなっています。 – lionel
私の問題の一部は、元の質問には明確さが欠けていました。 –