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

R语言统计mtcars数据集cyl与gear列组合观测数的实现问题

R语言统计mtcars数据集cyl与gear列组合观测数的实现问题

嘿,刚接触R的话确实容易在循环上绕弯路,其实你要的每个气缸数(cyl)和档位(gear)组合的观测数,R里有好多现成的工具能快速搞定,不用自己写复杂的嵌套循环~我给你分享几个简单好用的方法:


方法1:用基础R的table()函数(最快捷)

table()函数就是专门用来生成列联表、统计分类变量组合计数的,直接把两个变量传进去就行:

# 生成cyl和gear的组合计数表
count_table <- table(mtcars$cyl, mtcars$gear)
print(count_table)

输出会是一个二维表格,行是气缸数,列是档位,每个单元格里的数字就是对应组合的观测数。如果想转成数据框格式更直观,可以再加一步:

# 转成数据框
count_df <- as.data.frame(count_table)
colnames(count_df) <- c("Cylinder", "Gear", "Observation_Count")
print(count_df)

这样你就能清楚看到每一组(比如4缸3档、4缸4档)对应的观测数量了。


方法2:用tidyverse的dplyr包(适合后续数据处理)

如果你平时用tidyverse系列工具(学校里可能也会教),用group_by()加summarize()的组合更灵活:

# 先加载dplyr包
library(dplyr)

# 分组统计
count_result <- mtcars %>%
  group_by(cyl, gear) %>%
  summarize(Observation_Count = n(), .groups = "drop")

print(count_result)

这里group_by(cyl, gear)是按气缸数和档位分组,n()就是统计每组的观测数量,.groups = "drop"是分组后取消分组状态,方便后续操作。


为什么你的for循环没成功?

顺便说下你之前的循环问题:你用for (i in crosstabs$Cylinder),这里的i是气缸的数值(比如4、6、8),不是数据框的行索引,所以crosstabs[i,j]这种写法会索引出错,自然出不了结果。其实R里处理这种分类统计,尽量用内置函数,比自己写循环高效多啦~

从统计结果里你能轻松看到各组合的观测情况:比如8缸3档的观测数最多,有12个;4缸5档有5个,6缸5档只有1个,而4缸3档仅1辆。

备注:内容来源于stack exchange,提问作者code_beginner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 12:44:31