如何用循环基于数据框列生成多个与Municipio的列联表?
批量生成Municipio与其他列的列联表(R语言)
先将示例数据框加载到R环境中:
df <- structure(list(`Nombre del encuestado` = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Dim = 20L, class = "table"), Municipio = c("IPIALES", "IPIALES", "IPIALES", "IPIALES", "IPIALES", "IPIALES", "IPIALES", "IPIALES", "IPIALES", "IPIALES", "IPIALES", "IPIALES", "IPIALES", "IPIALES", "IPIALES", "IPIALES", "IPIALES", "IPIALES", "IPIALES", "ARBOLEDA"), `Cuenta con sistema de Riego:` = c("NO", "NO", "NO", "SI", "SI", "NO", "NO", "NO", "SI", "NO", "SI", "NO", "NO", "SI", "SI", "NO", "NO", "SI", "NO", "NO"), `Procedencia del agua:` = c("Lluvia", "Lluvia", "Lluvia", "Acueducto", "Acueducto", "Lluvia", "Lluvia", "Lluvia", "Acueducto", "Lluvia", "Acueducto", "Lluvia", "Lluvia", "Acueducto", "Acueducto", "Lluvia", "Lluvia", "Acueducto", "Lluvia", "Lluvia"), `Cuenta con certificación en:` = c("Ningúna", "Ningúna", "Ningúna", "Ningúna", "Ningúna", "Ningúna", "Ningúna", "Ningúna", "Ningúna", "Ningúna", "Ningúna", "Ningúna", "Ningúna", "Ningúna", "Ningúna", "Ningúna", "Ningúna", "Ningúna", "BPA", "Ningúna")), row.names = c(NA, 20L), class = "data.frame")
如果你已经能手动用table(df$Municipio, df$目标列)生成单个列联表,下面两种方法可以帮你批量处理所有目标列:
方法1:for循环(直观易调试)
先筛选出需要配对的列——排除Municipio本身,以及全为单一值的Nombre del encuestado(这类列的列联表无分析价值):
# 定义目标列集合 target_cols <- setdiff(names(df), c("Municipio", "Nombre del encuestado")) # 创建空列表存储所有列联表 cross_tables <- list() # 循环遍历每个目标列 for (col in target_cols) { # 生成当前列与Municipio的列联表 tbl <- table(df$Municipio, df[[col]]) # 把列联表存入列表,用列名作为索引键 cross_tables[[col]] <- tbl # 可选:打印当前列的列联表,方便即时查看 cat("=== Municipio vs", col, "列联表 ===\n") print(tbl) cat("\n") }
循环结束后,cross_tables列表里就存好了所有结果,比如调用灌溉系统的列联表可直接用cross_tables[["Cuenta con sistema de Riego:"]]。
方法2:lapply(R风格简洁实现)
R的lapply是更高效的向量式操作,代码更紧凑:
# 同样先定义目标列 target_cols <- setdiff(names(df), c("Municipio", "Nombre del encuestado")) # 用lapply批量生成列联表 cross_tables_lapply <- lapply(target_cols, function(col) { table(df$Municipio, df[[col]]) }) # 给列表元素命名,方便后续查找 names(cross_tables_lapply) <- target_cols # 查看所有结果 cross_tables_lapply
两种方法各有优势:for循环逻辑直观,适合新手调试;lapply是R原生向量操作,代码更简洁,处理大数据时效率更高。
内容的提问来源于stack exchange,提问作者Alex Velasquez
相关产品推荐
相关产品推荐

