如果你一步一步地分解它,它会更容易理解。每列取最小值后的输出为:
library(dplyr)
library(palmerpenguins)
penguins_raw %>%
select_if(is.numeric) %>%
apply(2, min, na.rm = TRUE)
# Sample Number Culmen Length (mm) Culmen Depth (mm) Flipper Length (mm)
# 1.00 32.10 13.10 172.00
# Body Mass (g) Delta 15 N (o/oo) Delta 13 C (o/oo)
# 2700.00 7.63 -27.02
现在,您正在对这个输出应用函数 apply(2, max, na.rm = TRUE),这不是您想要的,因为您想从 penguins_raw 数据集中而不是从上述输出中获取每一列的 max。
如果您使用管道和dplyr 函数,则有专门的函数来执行此类计算。在这种情况下,您可以使用across。
penguins_raw %>%
summarise(across(where(is.numeric), list(min = ~min(., na.rm = TRUE),
max = ~max(., na.rm = TRUE))))
或者,如果您使用的是旧版本的 dplyr,请使用 summarise_if:
penguins_raw %>%
summarise_if(is.numeric, list(min = ~min(., na.rm = TRUE),
max = ~max(., na.rm = TRUE)))
要将数据转换为 3 列格式,我们可以使用 pivot_longer。
penguins_raw %>%
summarise(across(where(is.numeric), list(min = ~min(., na.rm = TRUE),
max = ~max(., na.rm = TRUE)))) %>%
pivot_longer(cols = everything(),
names_to = c('name', '.value'),
names_sep = '_')
# name min max
# <chr> <dbl> <dbl>
#1 Sample Number 1 152
#2 Culmen Length (mm) 32.1 59.6
#3 Culmen Depth (mm) 13.1 21.5
#4 Flipper Length (mm) 172 231
#5 Body Mass (g) 2700 6300
#6 Delta 15 N (o/oo) 7.63 10.0
#7 Delta 13 C (o/oo) -27.0 -23.8