R语言新手咨询各时间点'i'占比及均值的计算方法
R实现:分时间点计算'i'占比并求解平均的方案
需求对应逻辑
你的核心统计流程分为两步:
- 逐时间点计算占比:每个时间点列单独统计「取值为'i'的样本数」/「该列剔除NA后的有效总样本数」
- 汇总求平均:将所有时间点算出的占比取算术平均值
现有代码的适配说明
你当前编写的脚本是将2-8列中所有满足'i'的样本合并后统计总长度,没有按单个时间点拆分计算占比,无法直接匹配目标需求;脚本中针对第8列'bc'、第12列'bc'的计数属于独立的其他统计任务,和本次计算流程无关联。
可直接运行的实现代码
以下代码适配你当前的数据集C16.3,逻辑和你手动过滤NA的习惯完全一致,不需要额外安装第三方包:
# 1. 提取所有时间点对应的列(根据你之前的代码设定为第2-8列) timepoint_data <- C16.3[, 2:8] # 2. 逐列计算单时间点的统计值 # 计算每列的有效总样本数(剔除NA) valid_sample_count <- colSums(!is.na(timepoint_data)) # 计算每列取值为'i'的样本数(na.rm=TRUE自动排除NA值的干扰) i_value_count <- colSums(timepoint_data == "i", na.rm = TRUE) # 计算每个时间点的'i'占比 timepoint_i_ratio <- i_value_count / valid_sample_count # 3. 对所有时间点的占比求平均值 final_average_ratio <- mean(timepoint_i_ratio, na.rm = TRUE) # 结果查看命令 timepoint_i_ratio # 输出每个时间点的具体占比 final_average_ratio # 输出最终的平均占比结果
代码说明:上述计算逻辑中,占比分母已经剔除所有NA值,和你之前手动加!is.na()过滤的规则完全一致,不会把缺失样本算入有效基数。
内容的提问来源于stack exchange,提问作者user15699897
相关产品推荐
相关产品推荐

