R语言:使用for循环创建交叉表并按对应列名命名的问题
问题原因与解决方法
你当前的循环是直接遍历dat[2:5]的列值,而非列名,所以用i拼接出来的变量名是基于列中数值的,自然无法对应列标题。要生成和列名匹配的表格名称,需要循环列的索引或列名本身,获取到对应列的名称后再用于命名。
修正后的代码(两种方式)
方式一:循环列索引
通过列索引定位目标列,再提取列名来生成变量名:
set.seed(50) n = 7 dat <- data.frame( first_column = c(1:n), second_column = sample(1:3, n, replace = TRUE), third_column = sample(1:3, n, replace = TRUE), fourth_column = sample(1:3, n, replace = TRUE), fifth_column = sample(1:3, n, replace = TRUE) ) # 遍历第2到第5列的索引 for(col_idx in 2:ncol(dat)){ # 获取当前列的名称 col_name <- colnames(dat)[col_idx] # 生成对应列名的表格变量名 table_name <- paste("R", col_name, "table", sep = "_") # 生成交叉表并赋值到对应变量 assign(table_name, table(dat$first_column, as.factor(dat[[col_name]]))) # 打印结果 print(get(table_name)) }
运行后会生成R_second_column_table、R_third_column_table等与列名对应的表格变量。
方式二:直接循环列名
直接遍历目标列的名称列表,逻辑更直观:
# 定义需要处理的列名集合 target_cols <- colnames(dat)[2:5] for(col_name in target_cols){ table_name <- paste("R", col_name, "table", sep = "_") assign(table_name, table(dat$first_column, as.factor(dat[[col_name]]))) print(get(table_name)) }
注:原代码中third_column的sample函数多了一个冗余逗号,已在修正代码中去掉。
内容的提问来源于stack exchange,提问作者Bipp23
相关产品推荐
相关产品推荐

