R语言循环遍历数据框列名批量生成table()频数表的问题
问题修正方案
你的原有代码存在两个核心问题:
my.df$nam[i]的写法无法正常匹配列:$操作符不会解析变量中的字符串值,会直接尝试在my.df中找名为nam的列,自然匹配失败返回空值。- 用普通向量存储table输出会丢失结构:table返回的是表格类对象,用普通向量赋值会被强制拆解为单值,无法保留完整统计结果。
修正后的for循环实现
my.df <- mtcars[,c(2:5)] colnames(my.df) <- c("A.1", "A.2", "A.3", "A.4") nam <- colnames(my.df) # 直接读取现有列名,避免手动拼接出错 my.tables <- list() # 初始化列表存储多个table结果 for(i in seq_along(nam)) { # 用[[]]操作符可解析字符串形式的列名 my.tables[[i]] <- table(my.df[[nam[i]]]) # 给每个统计结果绑定对应列名,方便后续提取 names(my.tables)[i] <- nam[i] } # 打印所有列的统计结果 my.tables # 单独提取某列结果示例:my.tables$A.1
更简洁的向量化实现(无需手动写循环)
直接用lapply遍历数据框的所有列执行统计,输出结构和上面的for循环完全一致:
my.tables <- lapply(my.df, table)
两种写法得到的my.tables都是命名列表,每个元素对应你需要的table(my.df$A.1)到table(my.df$A.4)的完整统计结果。
内容的提问来源于stack exchange,提问作者symkly
相关产品推荐
相关产品推荐

