如何在R语言数据框中统计各列高于列均值的数值数量?
统计数据框各列高于列均值的数值数量
针对你给出的示例数据,这里有两种简单高效的方法来实现需求:
首先先重现你的数据:
a <- c(1,2,3) b <- c(4,5,6) c <- c(7,8,9) df <- data.frame(a,b,c)
方法1:基础R的apply()函数
这是最直接的基础R解决方案,不需要额外安装包:
apply(df, 2, function(x) sum(x > mean(x)))
apply(df, 2, ...)中的2表示按列进行操作(如果是1就是按行)- 匿名函数
function(x)接收每一列作为输入x,先计算该列的均值mean(x),然后判断每个元素是否大于均值(得到逻辑向量),最后用sum()统计TRUE的数量(因为逻辑值在R中TRUE=1,FALSE=0)
运行后会得到结果:
a b c 1 1 1
和你的预期一致,每列都有1个数值高于各自的均值。
方法2:tidyverse风格(使用dplyr包)
如果你习惯用tidyverse生态的工具,推荐用dplyr的across()函数,代码更具可读性:
首先确保你已经安装并加载了dplyr:
# 安装(首次使用时) install.packages("dplyr") # 加载包 library(dplyr)
然后运行统计代码:
df %>% summarise(across(everything(), ~sum(.x > mean(.x))))
across(everything(), ...)表示对数据框的所有列应用后续操作~sum(.x > mean(.x))是公式风格的简写,.x代表当前处理的列,逻辑和基础R方法一致
运行后会返回一个数据框格式的结果:
a b c 1 1 1 1
内容的提问来源于stack exchange,提问作者Luís Correia
相关产品推荐
相关产品推荐

