R语言处理每行元素数不同的CSV统计基因数并绘制柱状图的方法
实现方案(R语言,优先使用基础函数无需额外安装依赖包)
第一步:统计每行y基因ID的数量
直接按行读取文件后拆分统计即可,无需提前对齐列:
# 1. 读取你的CSV文件,每行作为一个独立字符串读取 lines <- readLines("你的文件路径.csv") # 如果文件第一行是表头,执行这行删除表头:lines <- lines[-1] # 2. 逐行统计y的数量 result_df <- data.frame( x_id = character(length(lines)), y_count = integer(length(lines)) ) for (i in seq_along(lines)) { elements <- strsplit(lines[i], "\\s+")[[1]] result_df$x_id[i] <- elements[1] result_df$y_count[i] <- length(elements) - 1 } # 3. 导出你需要的格式结果 write.table(result_df, "统计结果.txt", sep = " ", row.names = F, col.names = F, quote = F)
运行后导出的统计结果.txt就是你要求的x+数量的格式。
第二步:绘制分布柱状图
直接用统计好的y数量列计算分布绘图即可:
# 统计每个y数量对应的行数 count_table <- table(result_df$y_count) # 绘制柱状图 barplot(count_table, main = "每行基因ID数量分布", xlab = "单行列的基因ID个数", ylab = "对应的行数", col = "lightblue")
可选:合并4个以上的分组统计
如果你需要把4个以上的统一归为「≥5」的分组,执行下面的代码:
# 生成分组标签 result_df$group <- ifelse(result_df$y_count >=5, "≥5", as.character(result_df$y_count)) # 按指定顺序统计分组 group_table <- table(factor(result_df$group, levels = c("1","2","3","4","≥5"))) # 绘制分组后的柱状图 barplot(group_table, main = "每行基因ID数量分布", xlab = "单行列的基因ID个数", ylab = "对应的行数", col = "lightblue")
内容的提问来源于stack exchange,提问作者kinda_tired
相关产品推荐
相关产品推荐

