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

将DataFrame中Gender与Stress字段编码转换并生成百分比交叉表

处理因子变量并生成性别与压力的百分比交叉表

步骤1:转换因子变量为目标数值型

你的数据里Gender和Stress都是因子类型,按照要求做映射转换:

  • Gender:原水平"0"对应0(Female),"1"对应1(Male)
  • Stress:原水平"No"对应0,"Yes"对应1

Base R 实现

# 转换Gender:先转字符再转数值,避免因子水平索引干扰
df$Gender <- as.numeric(as.character(df$Gender))
# 转换Stress:利用因子默认顺序,as.numeric返回1对应"No"、2对应"Yes",减1得到0/1
df$Stress <- as.numeric(df$Stress) - 1

dplyr 实现(更直观)

library(dplyr)

df <- df %>%
  mutate(
    Gender = case_when(
      Gender == "0" ~ 0,
      Gender == "1" ~ 1
    ),
    Stress = case_when(
      Stress == "No" ~ 0,
      Stress == "Yes" ~ 1
    )
  )

步骤2:生成百分比交叉表

我们生成按性别分组的压力分布百分比(即每个性别中,有/无压力的占比):

Base R 实现

# 生成原始频数交叉表
freq_tab <- table(Gender = df$Gender, Stress = df$Stress)
# 转换为行百分比(每行总和为100%)
pct_tab <- prop.table(freq_tab, margin = 1) * 100
# 重命名行列让结果更易读
dimnames(pct_tab) <- list(
  Gender = c("Female(0)", "Male(1)"),
  Stress = c("No(0)", "Yes(1)")
)

# 查看结果
print(pct_tab)

dplyr + janitor 实现(更美观)

如果需要同时显示频数和格式化百分比,推荐用janitor包:

library(janitor)

df %>%
  # 把数值转成文字标签提升可读性
  mutate(
    Gender = ifelse(Gender == 0, "Female", "Male"),
    Stress = ifelse(Stress == 0, "No", "Yes")
  ) %>%
  tabyl(Gender, Stress) %>%          # 生成基础交叉表
  adorn_percentages("row") %>%       # 计算行百分比
  adorn_pct_formatting(digits = 1) %>% # 格式化百分比(保留1位小数)
  adorn_ns()                         # 添加原始频数

运行后会得到类似这样的格式化结果:

Gender    No       Yes
 Female  60.0% (3) 40.0% (2)
 Male    33.3% (1) 66.7% (2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:40:37