如何在R的apply函数内直接选择数值型列,无需额外步骤?
在R的apply函数中直接选择数值型列的方法
当然可以不用额外的select_if步骤,直接在apply的参数里完成数值列筛选,以下是具体实现:
方法1:结合sapply在apply内筛选列
直接在apply的第一个参数中,通过sapply判断每列是否为数值型,以此筛选目标列:
pacman::p_load(tidyverse) palmerpenguins::penguins %>% drop_na() %>% {apply(.[sapply(., is.numeric)], 2, \(x) mean(x, na.rm = T))}
输出结果和你原来的代码完全一致:
bill_length_mm bill_depth_mm flipper_length_mm body_mass_g 43.99279 17.16486 200.96697 4207.05706 year 2008.04204
代码解释
{}用于保留管道运算符%>%的上下文,让.能正确指代前一步的数据框sapply(., is.numeric)对数据框的每一列判断是否为数值型,返回一个逻辑向量.[sapply(., is.numeric)]用上述逻辑向量筛选出数据框中的数值型列,再传入apply进行计算
替代方案(tidyverse风格)
如果更习惯tidyverse的语法,也可以用summarize结合across实现相同效果,无需使用apply:
palmerpenguins::penguins %>% drop_na() %>% summarize(across(where(is.numeric), mean, na.rm = T))
输出为数据框格式:
bill_length_mm bill_depth_mm flipper_length_mm body_mass_g year 1 43.99279 17.16486 200.96697 4207.057 2008.042
内容的提问来源于stack exchange,提问作者Ramakrishna S
相关产品推荐
相关产品推荐

