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

在R中按城市分组执行二元变量列联表分析的方法

嘿,这事儿其实挺简单的——核心就是把数据集按city拆分成两个子集,然后分别给每个子集调用你写好的交叉制表函数就行!我给你两种R里常用的实现方式,你挑顺手的来:

方法1:用Base R的split + lapply

这是最基础的原生写法,不需要额外加载包:

# 假设你写的交叉制表函数叫 cross_tab_func
# 第一步:按city把数据集拆分成两个子集
city_data_list <- split(mydat, mydat$city)

# 第二步:遍历每个子集,调用你的函数
city_crosstabs <- lapply(city_data_list, function(subset_data) {
  # 如果你写的函数已经自动筛选x1-x7,这行可以省略
  binary_vars_only <- subset_data[, paste0("x", 1:7)]
  # 调用你的交叉制表函数
  cross_tab_func(binary_vars_only)
})

# 查看结果:列表里的每个元素对应一个城市的结果
print(city_crosstabs$Washington)
# 注意New-York里的连字符,需要用反引号包裹
print(city_crosstabs$`New-York`)

方法2:用tidyverse(dplyr)的分组操作

如果你平时习惯用tidyverse风格的代码,这种写法更直观:

library(dplyr)

# 按city分组,对每个分组应用你的函数
city_crosstabs_tidy <- mydat %>%
  group_by(city) %>%
  group_map(function(group_data, group_key) {
    # 同样,函数已处理变量筛选的话可以跳过这行
    binary_vars_only <- group_data[, paste0("x", 1:7)]
    # 调用函数并带上城市标签,方便后续区分
    list(city_name = group_key$city, crosstab_result = cross_tab_func(binary_vars_only))
  })

# 提取对应城市的结果
city_crosstabs_tidy[[1]]$crosstab_result  # Washington的交叉制表
city_crosstabs_tidy[[2]]$crosstab_result  # New-York的交叉制表

几个小提示:

  • 如果你的cross_tab_func已经内置了筛选x1-x7的逻辑,那代码里的binary_vars_only部分可以直接删掉,把subset_data或group_data直接传给函数就行。
  • 要是觉得New-York的反引号麻烦,你可以先把city变量的取值改一下:mydat$city <- gsub("-", "_", mydat$city),之后就可以用city_crosstabs$New_York直接访问了。
  • 如果你的函数是直接输出结果(而不是返回结果),那把lapply换成for循环遍历子集,或者用group_walk代替group_map,这样每个分组的结果会直接输出到控制台。

内容的提问来源于stack exchange,提问作者psysky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:43:38