R语言处理CSV:删除全零行与按特征分组计算均值
实现思路与代码示例
1. 删除Kriterium 1至Kriterium 4全为0的行
通过判断每行中目标列的总和是否为0来筛选有效行,以下是两种常用实现方式:
Base R 方式
# 读取数据(若未完成读取) beispiel <- read.csv("Beispiel.csv", stringsAsFactors = FALSE) # 定义目标列名(根据实际CSV列名调整) kriterium_cols <- c("Kriterium.1", "Kriterium.2", "Kriterium.3", "Kriterium.4") # 筛选出四列不全为0的行 beispiel_clean <- beispiel[rowSums(beispiel[kriterium_cols]) != 0, ]
dplyr 方式
若习惯tidyverse工具链,代码逻辑更直观:
library(dplyr) beispiel_clean <- beispiel %>% # 保留四列不全为0的行,if_all检查指定列是否全满足等于0的条件,取反后筛选 filter(!if_all(all_of(kriterium_cols), ~ .x == 0))
2. 按Merkmal分组计算均值并生成新数据框
生成的结果将包含唯一Merkmal及对应各Kriterium的均值,可直接用于条形图绘制:
Base R 方式
# 按Merkmal分组,计算每个Kriterium列的均值 merkmal_means <- aggregate(beispiel_clean[kriterium_cols], by = list(Merkmal = beispiel_clean$merkmal), FUN = mean)
dplyr 方式
merkmal_means <- beispiel_clean %>% group_by(merkmal) %>% # 对所有Kriterium列计算均值,.groups = "drop"取消分组状态 summarise(across(all_of(kriterium_cols), mean), .groups = "drop")
绘图补充说明
生成的merkmal_means是宽格式数据,若用ggplot2绘图,建议转成长格式:
library(ggplot2) library(tidyr) merkmal_means_long <- merkmal_means %>% pivot_longer(cols = all_of(kriterium_cols), names_to = "Kriterium", values_to = "Mean") ggplot(merkmal_means_long, aes(x = merkmal, y = Mean, fill = Kriterium)) + geom_bar(stat = "identity", position = "dodge") + labs(x = "Merkmal", y = "均值", fill = "指标")
内容的提问来源于stack exchange,提问作者Isegrimm
相关产品推荐
相关产品推荐

