nest_by()
與group_by()
密切相關。然而,組結構不是存儲在元數據中,而是在數據中明確顯示,為每個組鍵提供一行以及包含所有其他數據的數據幀列表列。
nest_by()
返回一個rowwise數據幀,這使得對分組數據的操作特別優雅。有關更多詳細信息,請參閱vignette("rowwise")
。
參數
- .data
-
數據幀、數據幀擴展(例如 tibble)或惰性數據幀(例如來自 dbplyr 或 dtplyr)。有關更多詳細信息,請參閱下麵的方法。
- ...
-
在
group_by()
中,用於分組的變量或計算。計算始終在未分組的數據幀上完成。要對分組數據執行計算,您需要在group_by()
之前使用單獨的mutate()
步驟。nest_by()
中不允許進行計算。在ungroup()
中,要從分組中刪除的變量。 - .key
-
列表列的名稱
- .keep
-
分組列是否應該保留在列表列中。
值
rowwise 數據幀。輸出具有以下屬性:
-
這些行來自底層
group_keys()
。 -
這些列是分組鍵加上一列 DataFrame 。
-
DataFrame 屬性不會保留,因為
nest_by()
從根本上創建了一個新的 DataFrame 。
一個表,每個分組變量的唯一組合包含一行。第一列是分組變量,後麵是一個 tibbles 列表列,以及其餘列的匹配行。
細節
請注意,df %>% nest_by(x, y)
大致相當於
df %>%
group_by(x, y) %>%
summarise(data = list(pick(everything()))) %>%
rowwise()
如果要取消嵌套嵌套 DataFrame ,可以使用 tidyr::unnest()
或利用 reframe()
s multi-row 行為:
nested %>%
reframe(data)
生命周期
nest_by()
不穩定,因為 tidyr::nest(.by =)
提供非常相似的行為。它將來可能會被棄用。
方法
該函數是泛型函數,這意味著包可以為其他類提供實現(方法)。有關額外參數和行為差異,請參閱各個方法的文檔。
當前在加載的包中可以使用以下方法: dplyr ( data.frame
, grouped_df
) 。
例子
# After nesting, you get one row per group
iris %>% nest_by(Species)
#> # A tibble: 3 × 2
#> # Rowwise: Species
#> Species data
#> <fct> <list<tibble[,4]>>
#> 1 setosa [50 × 4]
#> 2 versicolor [50 × 4]
#> 3 virginica [50 × 4]
starwars %>% nest_by(species)
#> # A tibble: 38 × 2
#> # Rowwise: species
#> species data
#> <chr> <list<tibble[,13]>>
#> 1 Aleena [1 × 13]
#> 2 Besalisk [1 × 13]
#> 3 Cerean [1 × 13]
#> 4 Chagrian [1 × 13]
#> 5 Clawdite [1 × 13]
#> 6 Droid [6 × 13]
#> 7 Dug [1 × 13]
#> 8 Ewok [1 × 13]
#> 9 Geonosian [1 × 13]
#> 10 Gungan [3 × 13]
#> # ℹ 28 more rows
# The output is grouped by row, which makes modelling particularly easy
models <- mtcars %>%
nest_by(cyl) %>%
mutate(model = list(lm(mpg ~ wt, data = data)))
models
#> # A tibble: 3 × 3
#> # Rowwise: cyl
#> cyl data model
#> <dbl> <list<tibble[,10]>> <list>
#> 1 4 [11 × 10] <lm>
#> 2 6 [7 × 10] <lm>
#> 3 8 [14 × 10] <lm>
models %>% summarise(rsq = summary(model)$r.squared)
#> `summarise()` has grouped output by 'cyl'. You can override using the
#> `.groups` argument.
#> # A tibble: 3 × 2
#> # Groups: cyl [3]
#> cyl rsq
#> <dbl> <dbl>
#> 1 4 0.509
#> 2 6 0.465
#> 3 8 0.423
# This is particularly elegant with the broom functions
models %>% summarise(broom::glance(model))
#> `summarise()` has grouped output by 'cyl'. You can override using the
#> `.groups` argument.
#> # A tibble: 3 × 13
#> # Groups: cyl [3]
#> cyl r.squared adj.r.squared sigma statistic p.value df logLik AIC
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 4 0.509 0.454 3.33 9.32 0.0137 1 -27.7 61.5
#> 2 6 0.465 0.357 1.17 4.34 0.0918 1 -9.83 25.7
#> 3 8 0.423 0.375 2.02 8.80 0.0118 1 -28.7 63.3
#> # ℹ 4 more variables: BIC <dbl>, deviance <dbl>, df.residual <int>,
#> # nobs <int>
models %>% reframe(broom::tidy(model))
#> # A tibble: 6 × 6
#> cyl term estimate std.error statistic p.value
#> <dbl> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 4 (Intercept) 39.6 4.35 9.10 0.00000777
#> 2 4 wt -5.65 1.85 -3.05 0.0137
#> 3 6 (Intercept) 28.4 4.18 6.79 0.00105
#> 4 6 wt -2.78 1.33 -2.08 0.0918
#> 5 8 (Intercept) 23.9 3.01 7.94 0.00000405
#> 6 8 wt -2.19 0.739 -2.97 0.0118
# Note that you can also `reframe()` to unnest the data
models %>% reframe(data)
#> # A tibble: 32 × 11
#> cyl mpg disp hp drat wt qsec vs am gear carb
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 4 22.8 108 93 3.85 2.32 18.6 1 1 4 1
#> 2 4 24.4 147. 62 3.69 3.19 20 1 0 4 2
#> 3 4 22.8 141. 95 3.92 3.15 22.9 1 0 4 2
#> 4 4 32.4 78.7 66 4.08 2.2 19.5 1 1 4 1
#> 5 4 30.4 75.7 52 4.93 1.62 18.5 1 1 4 2
#> 6 4 33.9 71.1 65 4.22 1.84 19.9 1 1 4 1
#> 7 4 21.5 120. 97 3.7 2.46 20.0 1 0 3 1
#> 8 4 27.3 79 66 4.08 1.94 18.9 1 1 4 1
#> 9 4 26 120. 91 4.43 2.14 16.7 0 1 5 2
#> 10 4 30.4 95.1 113 3.77 1.51 16.9 1 1 5 2
#> # ℹ 22 more rows
相關用法
- R dplyr nest_join 嵌套連接
- R dplyr near 比較兩個數值向量
- R dplyr nth 從向量中提取第一個、最後一個或第 n 個值
- R dplyr n_distinct 計算獨特的組合
- R dplyr na_if 將值轉換為 NA
- R dplyr ntile 將數值向量分為 n 組
- R dplyr group_trim 修剪分組結構
- R dplyr slice 使用行的位置對行進行子集化
- R dplyr copy_to 將本地數據幀複製到遠程src
- R dplyr sample_n 從表中采樣 n 行
- R dplyr consecutive_id 為連續組合生成唯一標識符
- R dplyr row_number 整數排名函數
- R dplyr band_members 樂隊成員
- R dplyr mutate-joins 變異連接
- R dplyr coalesce 找到第一個非缺失元素
- R dplyr group_split 按組分割 DataFrame
- R dplyr mutate 創建、修改和刪除列
- R dplyr order_by 用於排序窗口函數輸出的輔助函數
- R dplyr context 有關“當前”組或變量的信息
- R dplyr percent_rank 比例排名函數
- R dplyr recode 重新編碼值
- R dplyr starwars 星球大戰人物
- R dplyr desc 降序
- R dplyr between 檢測值落在指定範圍內的位置
- R dplyr cumall 任何、全部和平均值的累積版本
注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Nest by one or more variables。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。