R dataframe如何像Excel一样使用COUNT函数添加统计行列边距
在R的dataframe中实现Excel COUNT函数效果添加行列边距统计
Excel的COUNT函数逻辑为统计包含数字的单元格,自动排除文本、空值/NA,以下提供两种常用实现方案:
前置准备:示例数据
mdata <- data.frame("CATEGORY"=c("A","B","C","D","E","F"),"SALES"=c(1,20,2,2,0,3),"QTY"=c(0,4,0,0,0,2),"RETURN"=c(0,3,1,0,9,1))
方案1:基础R实现(无需额外安装包)
# 1. 提前将分类列转为字符型,避免后续绑定行时报因子类型错误 mdata$CATEGORY <- as.character(mdata$CATEGORY) # 2. 筛选出所有数值列,对应Excel中要统计的数字区域 num_cols <- sapply(mdata, is.numeric) # 3. 新增行统计列:统计每行数值列中有效数字的数量 mdata$COUNT <- apply(mdata[, num_cols], 1, function(x) sum(!is.na(x))) # 4. 计算列统计结果,添加为最后一行 col_count <- c( "COUNT", sapply(mdata[, num_cols], function(x) sum(!is.na(x))), sum(mdata$COUNT) ) mdata <- rbind(mdata, col_count)
如果需要统计大于0的数值数量而非所有数字,只需把代码中的!is.na(x)替换为!is.na(x) & x > 0即可。
方案2:tidyverse实现(语法更简洁)
library(dplyr) # 新增行统计列,同时添加列统计行 mdata <- mdata %>% # 行维度统计 rowwise() %>% mutate(COUNT = sum(across(where(is.numeric), ~!is.na(.x)))) %>% ungroup() %>% # 列维度统计,绑定为最后一行 bind_rows( summarise( ., across(where(is.numeric), ~sum(!is.na(.x))), CATEGORY = "COUNT" ) )
内容的提问来源于stack exchange,提问作者anderwyang
相关产品推荐
相关产品推荐

