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
相关产品推荐
相关产品推荐

