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

R语言:如何统计除id外各因子变量的类别频数并生成目标表格

解决方案

首先你需要修正第一步的NA替换操作(原代码未将替换结果赋值回df3,导致替换未生效),之后可以通过以下两种方式生成目标统计表格:

方法一:使用dplyr + purrr

library(dplyr)
library(purrr)
library(tibble)

# 原始数据
df3 <- data.frame(
  id = c(1,2,3,4,5,6,7),
  ibd = c(0,1,1,0,0,1,1),
  ihd = c(1,1,0,NA,0,0,1),
  psoriasis = c(0,0,NA,0,0,1,1),
  mi = c(1,0,0,0,0,NA,1)
)

# 替换NA为2并赋值回df3
df3 <- df3 %>% replace(is.na(.), 2)
# 将id以外的变量转为因子
df3 <- df3 %>% mutate(across(-id, as.factor))

# 生成统计表格
df5 <- df3 %>%
  select(-id) %>%
  # 对每个变量统计频数,保留变量名作为新列
  map_dfr(table, .id = "variable") %>%
  # 转为宽表结构
  pivot_wider(names_from = variable, values_from = n) %>%
  # 添加行标识,对应0、1、NA的计数
  mutate(id = case_when(
    .row == 1 ~ "0s",
    .row == 2 ~ "1s",
    .row == 3 ~ "NAs"
  )) %>%
  # 调整列顺序,移除临时的.row列
  select(id, everything(), -.row)

# 输出结果
df5

方法二:使用sapply + 基础数据框操作

library(dplyr)
library(tibble)

# 原始数据与预处理步骤同上
df3 <- data.frame(
  id = c(1,2,3,4,5,6,7),
  ibd = c(0,1,1,0,0,1,1),
  ihd = c(1,1,0,NA,0,0,1),
  psoriasis = c(0,0,NA,0,0,1,1),
  mi = c(1,0,0,0,0,NA,1)
)
df3 <- df3 %>% replace(is.na(.), 2)
df3 <- df3 %>% mutate(across(-id, as.factor))

# 批量统计频数并转换格式
freq_table <- df3 %>%
  select(-id) %>%
  sapply(table) %>%
  as.data.frame.matrix()

# 重命名行标识并调整结构
df5 <- freq_table %>%
  rownames_to_column("id") %>%
  mutate(id = recode(id, "0" = "0s", "1" = "1s", "2" = "NAs")) %>%
  select(id, ibd, ihd, psoriasis, mi)

# 输出结果
df5

两种方法最终都会生成你需要的df5表格结构,统计每个变量的0、1、NA(已替换为2)的出现次数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 13:17:37