R语言table()函数无法汇总男女学生总人数问题(新手求助)
R语言学生性别频数表生成修正方案
问题根源
原代码中总人数统计错误的核心原因是table(data$GENDER)返回的是按性别分组的二维频数向量,会分别存储男性、女性的人数,不是单一的总人数汇总值;该对象长度为2,和后续生成的长度为1的男性人数、女性人数对象用cbind()合并时会出现维度适配问题,最终输出的表格不符合预期。
另外原代码还有一处拼写错误:读入csv文件的函数是read.csv2(),代码中写的read.cvs2()属于拼写错误(把csv错写为cvs),运行时会直接报“找不到函数”的错误。
修正方法
统计对应人数不需要反复调用table(),直接用逻辑判断求和的写法更简洁,还能自动处理缺失值,避免统计偏差:
- 学生总人数:统计性别列非缺失的样本量,用
sum(!is.na(data$GENDER)) - 男性学生人数:统计性别编码为1的样本量,用
sum(data$GENDER == 1, na.rm = TRUE) - 女性学生人数:统计性别编码为2的样本量,用
sum(data$GENDER == 2, na.rm = TRUE)
修正后完整代码
# 读入问卷数据 data <- read.csv2("Questionnaire") # 计算三个统计指标 total_num <- sum(!is.na(data$GENDER)) male_num <- sum(data$GENDER == 1, na.rm = TRUE) female_num <- sum(data$GENDER == 2, na.rm = TRUE) # 生成规范的频数表 freqTab <- data.frame( 指标 = c("学生总人数", "男性学生人数", "女性学生人数"), 人数 = c(total_num, male_num, female_num) ) # 打印查看结果 print(freqTab)
额外说明
如果数据集不存在性别缺失值,也可以用nrow(data)直接统计总行数得到总人数,或者用sum(table(data$GENDER))对性别分组频数求和得到总人数,两种写法结果一致。
内容的提问来源于stack exchange,提问作者meolai
相关产品推荐
相关产品推荐

