如何在R中将数据筛选的两类统计结果整理为表格输出?
解决方法
首先要注意:必须保留原始数据,否则无法统计被过滤/移除的数量(你之前直接用处理后的数据覆盖了原始df,这会丢失统计所需的关键信息)。以下是完整的处理步骤:
1. 修正并保存原始数据
你提供的原始数据存在长度不匹配问题(item有4个元素,price_today有5个),先修正并保存为原始数据集:
original_df <- data.frame( item = c("a", "a", "c", "d"), price_today = c(1, "", 3, 4), stringsAsFactors = FALSE )
2. 按需求处理数据
筛选item为"a"的行,并过滤price_today的空值:
# 未安装dplyr的话先运行:install.packages("dplyr") library(dplyr) processed_df <- original_df %>% filter(item == "a") %>% filter(price_today != "")
3. 统计目标数值
- item列被过滤的条目数量:原始数据中
item不为"a"的行数 - price_today列被移除的空值数量:筛选出的
item为"a"的行中,price_today为空的行数
# 统计item被过滤的数量 filtered_item_num <- nrow(original_df) - nrow(filter(original_df, item == "a")) # 统计price空值被移除的数量 removed_null_price_num <- sum(filter(original_df, item == "a")$price_today == "")
4. 生成统计表格
将两个统计结果整理为表格:
stats_table <- data.frame( 统计类型 = c("item列被过滤的条目数", "price_today列被移除的空值数"), 数量 = c(filtered_item_num, removed_null_price_num) ) # 打印表格 print(stats_table)
运行后会得到如下表格输出:
统计类型 数量 1 item列被过滤的条目数 2 2 price_today列被移除的空值数 1
如果需要更美观的格式化表格,可以使用knitr包:
# 未安装knitr的话先运行:install.packages("knitr") library(knitr) kable(stats_table)
你之前代码的问题说明
print(ncol(df)):ncol()是统计列数,你需要统计行数,应该用nrow()message("number of row that has A is",df[df$item=="a",]):直接传入数据框子集只会输出整个数据,应该用nrow(df[df$item=="a",])来统计行数
内容的提问来源于stack exchange,提问作者Bubbles
相关产品推荐
相关产品推荐

