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

如何将R中2x4 tibble转换为4x4格式(指定布尔列为行)

R中tibble格式转换方案

你当前得到的2行4列tibble结构大致如下(模拟示例):

have_kidney_diseaseno_kidney_diseasemean_weightsd_weight
TRUEFALSE75.3015.20
FALSETRUE72.1014.80

要转换成4行4列,保留have_kidney_disease和no_kidney_disease作为行属性,只需用tidyr::pivot_longer()函数将均值、标准差列拆分为行即可。直接修改代码如下:

library(tidyverse)

# 生成原汇总表并赋值
summary_df <- BRFSS2015 %>%
  filter(!is.na(WTKG3), CHCKIDNY %in% 1:2) %>%
  mutate(have_kidney_disease = CHCKIDNY == 1, 
         no_kidney_disease = CHCKIDNY == 2,
         weight = WTKG3) %>%
  group_by(have_kidney_disease, no_kidney_disease) %>%
  summarize(mean_weight = mean(weight),
            sd_weight = sd(weight), 
            .groups = "drop") %>%
  mutate_if(is.numeric, round, digits=2)

# 转换为目标格式
final_df <- summary_df %>%
  pivot_longer(
    cols = c(mean_weight, sd_weight),  # 指定要转为行的指标列
    names_to = "weight_stat",          # 新增列,标记是均值还是标准差
    values_to = "value"                # 存储指标数值的列
  )

转换后的final_df就是4行4列的结构,示例如下:

have_kidney_diseaseno_kidney_diseaseweight_statvalue
TRUEFALSEmean_weight75.30
TRUEFALSEsd_weight15.20
FALSETRUEmean_weight72.10
FALSETRUEsd_weight14.80

如果觉得have_kidney_disease和no_kidney_disease两列重复冗余,可以合并为一个状态列,让结果更简洁:

final_df <- summary_df %>%
  mutate(kidney_status = case_when(
    have_kidney_disease ~ "有肾病",
    no_kidney_disease ~ "无肾病"
  )) %>%
  select(-have_kidney_disease, -no_kidney_disease) %>%
  pivot_longer(
    cols = c(mean_weight, sd_weight),
    names_to = "weight_stat",
    values_to = "value"
  ) %>%
  relocate(kidney_status)

这个版本的结果结构:

kidney_statusweight_statvalue
有肾病mean_weight75.30
有肾病sd_weight15.20
无肾病mean_weight72.10
无肾病sd_weight14.80

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:05:17