如何修复R代码创建分类雇佣比例表格时的‘private未找到’错误?
问题分析与代码修复
原代码出现Error in private : object 'private' not found的核心原因是循环内的变量引用语法错误,同时存在多处数据框索引、变量范围的问题:
- 循环中错误使用
row.table$private,正确的行索引写法应为table$private[row]或table[row, "private"] - 直接引用
employed未指定所属数据框,需明确为table$employed[row] - 判断政府/自雇类别的时候误用了原始
data对象,而非过滤后的table,且未按行索引 - 初始过滤逻辑
employed != 0 & unemployed != 0需确认合理性(同一对象通常不会同时处于雇佣和失业状态)
修复后的循环版本代码
# 加载dplyr包(使用filter函数必需) library(dplyr) # 过滤数据(保留原逻辑,若需调整可修改条件) data1 <- filter(data, employed != 0 & unemployed != 0) table_df <- data.frame(data1) # 避免用table作为变量名,与内置函数冲突 privateSum <- 0 privateEmployed <- 0 governmentSum <- 0 governmentEmployed <- 0 selfSum <- 0 selfEmployed <- 0 for(row in 1:nrow(table_df)) { # 处理private分类 if(table_df$private[row] == 1) { privateSum <- privateSum + 1 if(table_df$employed[row] == 1) { privateEmployed <- privateEmployed + 1 } } # 处理government分类 if(table_df$government[row] == 1) { governmentSum <- governmentSum + 1 if(table_df$employed[row] == 1) { governmentEmployed <- governmentEmployed + 1 } } # 处理self分类 if(table_df$self[row] == 1) { selfSum <- selfSum + 1 if(table_df$employed[row] == 1) { selfEmployed <- selfEmployed + 1 } } } # 构建结果表格 tab <- matrix( c(privateEmployed / privateSum, governmentEmployed / governmentSum, selfEmployed / selfSum), ncol = 3, byrow = TRUE ) colnames(tab) <- c('Private','Government','Self') rownames(tab) <- c('Proportion Employed') tab <- as.table(tab) print(tab)
更高效的R风格实现(推荐)
R中不推荐用循环处理这类聚合统计,用dplyr的向量操作更简洁高效:
library(dplyr) # 过滤数据(保留原逻辑) data1 <- filter(data, employed != 0 & unemployed != 0) # 计算各分类的雇佣比例 result <- data1 %>% summarise( Private = sum(private == 1 & employed == 1) / sum(private == 1), Government = sum(government == 1 & employed == 1) / sum(government == 1), Self = sum(self == 1 & employed == 1) / sum(self == 1) ) %>% t() %>% # 转置为表格格式 as.table() rownames(result) <- c('Private','Government','Self') colnames(result) <- c('Proportion Employed') print(result)
内容的提问来源于stack exchange,提问作者user20544203
相关产品推荐
相关产品推荐

