You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 18:45:02