summarise()
要求每個參數返回單個值,而 mutate()
要求每個參數返回與輸入相同的行數,而 reframe()
是更通用的工具,對每個組返回的行數沒有要求。
reframe()
通過將函數應用於現有 DataFrame 的列來創建新的 DataFrame 。它與 summarise()
最相似,但有兩個很大的區別:
-
reframe()
可以為每組返回任意數量的行,而summarise()
將每個組減少為單行。 -
reframe()
始終返回未分組的數據幀,而summarise()
可能返回分組或按行數據幀,具體取決於具體情況。
我們預計您使用 summarise()
的頻率要比使用 reframe()
的頻率高得多,但是當您需要應用不返回單個匯總值的複雜函數時,reframe()
會特別有用。
參數
- .data
-
數據幀、數據幀擴展(例如 tibble)或惰性數據幀(例如來自 dbplyr 或 dtplyr)。有關更多詳細信息,請參閱下麵的方法。
- ...
-
Name-value 函數對。該名稱將是結果中變量的名稱。該值可以是任意長度的向量。
未命名的 DataFrame 值從單個表達式添加多個列。
- .by
-
<
tidy-select
> (可選)僅針對此操作選擇要分組的列,作為group_by()
的替代方案。有關詳細信息和示例,請參閱?dplyr_by。
值
如果 .data
是一個 tibble,那麽就是一個 tibble。否則,一個 DataFrame 。
-
這些行源自底層分組鍵。
-
這些列是分組鍵和您提供的表達式的組合。
-
輸出始終未分組。
-
DataFrame 屬性不會保留,因為
reframe()
從根本上創建了一個新的 DataFrame 。
連接到 tible
reframe()
理論上連接到 tibble 中的兩個函數 tibble::enframe()
和 tibble::deframe()
:
-
enframe()
:矢量 -> DataFrame -
deframe()
: DataFrame ->向量 -
reframe()
: DataFrame -> DataFrame
例子
table <- c("a", "b", "d", "f")
df <- tibble(
g = c(1, 1, 1, 2, 2, 2, 2),
x = c("e", "a", "b", "c", "f", "d", "a")
)
# `reframe()` allows you to apply functions that return
# an arbitrary number of rows
df %>%
reframe(x = intersect(x, table))
#> # A tibble: 4 × 1
#> x
#> <chr>
#> 1 a
#> 2 b
#> 3 f
#> 4 d
# Functions are applied per group, and each group can return a
# different number of rows.
df %>%
reframe(x = intersect(x, table), .by = g)
#> # A tibble: 5 × 2
#> g x
#> <dbl> <chr>
#> 1 1 a
#> 2 1 b
#> 3 2 f
#> 4 2 d
#> 5 2 a
# The output is always ungrouped, even when using `group_by()`
df %>%
group_by(g) %>%
reframe(x = intersect(x, table))
#> # A tibble: 5 × 2
#> g x
#> <dbl> <chr>
#> 1 1 a
#> 2 1 b
#> 3 2 f
#> 4 2 d
#> 5 2 a
# You can add multiple columns at once using a single expression by returning
# a data frame.
quantile_df <- function(x, probs = c(0.25, 0.5, 0.75)) {
tibble(
val = quantile(x, probs, na.rm = TRUE),
quant = probs
)
}
x <- c(10, 15, 18, 12)
quantile_df(x)
#> # A tibble: 3 × 2
#> val quant
#> <dbl> <dbl>
#> 1 11.5 0.25
#> 2 13.5 0.5
#> 3 15.8 0.75
starwars %>%
reframe(quantile_df(height))
#> # A tibble: 3 × 2
#> val quant
#> <dbl> <dbl>
#> 1 167 0.25
#> 2 180 0.5
#> 3 191 0.75
starwars %>%
reframe(quantile_df(height), .by = homeworld)
#> # A tibble: 147 × 3
#> homeworld val quant
#> <chr> <dbl> <dbl>
#> 1 Tatooine 166. 0.25
#> 2 Tatooine 175 0.5
#> 3 Tatooine 183 0.75
#> 4 Naboo 165 0.25
#> 5 Naboo 183 0.5
#> 6 Naboo 190. 0.75
#> 7 Alderaan 169 0.25
#> 8 Alderaan 188 0.5
#> 9 Alderaan 190. 0.75
#> 10 Stewjon 182 0.25
#> # ℹ 137 more rows
starwars %>%
reframe(
across(c(height, mass), quantile_df, .unpack = TRUE),
.by = homeworld
)
#> # A tibble: 147 × 5
#> homeworld height_val height_quant mass_val mass_quant
#> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 Tatooine 166. 0.25 75 0.25
#> 2 Tatooine 175 0.5 80.5 0.5
#> 3 Tatooine 183 0.75 93 0.75
#> 4 Naboo 165 0.25 50.2 0.25
#> 5 Naboo 183 0.5 70.5 0.5
#> 6 Naboo 190. 0.75 80.2 0.75
#> 7 Alderaan 169 0.25 56.5 0.25
#> 8 Alderaan 188 0.5 64 0.5
#> 9 Alderaan 190. 0.75 71.5 0.75
#> 10 Stewjon 182 0.25 77 0.25
#> # ℹ 137 more rows
相關用法
- R dplyr recode 重新編碼值
- R dplyr rename 重命名列
- R dplyr relocate 更改列順序
- R dplyr row_number 整數排名函數
- R dplyr rowwise 按行對輸入進行分組
- R dplyr rows 操作單獨的行
- R dplyr group_trim 修剪分組結構
- R dplyr slice 使用行的位置對行進行子集化
- R dplyr copy_to 將本地數據幀複製到遠程src
- R dplyr sample_n 從表中采樣 n 行
- R dplyr consecutive_id 為連續組合生成唯一標識符
- R dplyr band_members 樂隊成員
- R dplyr mutate-joins 變異連接
- R dplyr nth 從向量中提取第一個、最後一個或第 n 個值
- R dplyr coalesce 找到第一個非缺失元素
- R dplyr group_split 按組分割 DataFrame
- R dplyr mutate 創建、修改和刪除列
- R dplyr order_by 用於排序窗口函數輸出的輔助函數
- R dplyr context 有關“當前”組或變量的信息
- R dplyr percent_rank 比例排名函數
- R dplyr starwars 星球大戰人物
- R dplyr desc 降序
- R dplyr between 檢測值落在指定範圍內的位置
- R dplyr cumall 任何、全部和平均值的累積版本
- R dplyr group_map 對每個組應用一個函數
注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Transform each group to an arbitrary number of rows。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。