很多时候,我发现自己在dplyr中手动组合了select()和mutate()函数.这通常是因为我正在整理数据框,想要根据旧列创建新列,并且只想保留新列.
例如,如果我有关于高度和宽度的数据但只想使用它们来计算并保留该区域,那么我将使用:
library(dplyr)
df <- data.frame(height = 1:3, width = 10:12)
df %>%
mutate(area = height * width) %>%
select(area)
Run Code Online (Sandbox Code Playgroud)
当在mutate步骤中创建了许多变量时,可能很难确保它们都在选择步骤中.有没有更优雅的方法来保留mutate步骤中定义的变量?
我一直在使用的一个解决方法如下:
df %>%
mutate(id = row_number()) %>%
group_by(id) %>%
summarise(area = height * width) %>%
ungroup() %>%
select(-id)
Run Code Online (Sandbox Code Playgroud)
这有效,但非常冗长,使用summarize()意味着性能受到影响:
library(microbenchmark)
microbenchmark(
df %>%
mutate(area = height * width) %>%
select(area),
df %>%
mutate(id = row_number()) %>%
group_by(id) %>%
summarise(area = height * width) %>%
ungroup() %>%
select(-id)
)
Run Code Online (Sandbox Code Playgroud)
输出:
min lq mean median uq max neval cld
868.822 954.053 …Run Code Online (Sandbox Code Playgroud)