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

如何用dplyr的summarise+across将统计结果按变量分行展示?

解决方案:生成按变量分行的统计概览表格

完全可以基于dplyr的现有方法实现,以下两种方案都能得到你期望的2行3列结果:

方案一:基于现有summarise+across结果,重塑数据结构

如果你想保留原有的summarise+across逻辑,只需后续用tidyr::pivot_longer将宽格式结果转为长格式:

library(dplyr)
library(tidyr)

df <- data.frame(
  var1 = 1:10,
  var2 = 11:20
)

VarSum <- df %>% 
  # 原代码生成宽格式统计结果
  summarise(across(c(var1, var2), list(n = length, mean = mean, sd = sd))) %>%
  # 将列名拆分,重塑为按变量分行的结构
  pivot_longer(
    cols = everything(),
    names_to = c("variable", ".value"),  # ".value"指定统计量作为列名
    names_sep = "_"  # 匹配across默认生成的列名分隔符
  )

print(VarSum)

输出结果:

# A tibble: 2 × 4
  variable     n  mean    sd
  <chr>    <int> <dbl> <dbl>
1 var1        10   5.5  3.03
2 var2        10  15.5  3.03

方案二:先转长格式再分组统计(更直观)

另一种更直接的思路是先将宽格式数据转为长格式,再按变量分组计算统计量,避免后续的结构转换:

library(dplyr)
library(tidyr)

df <- data.frame(
  var1 = 1:10,
  var2 = 11:20
)

VarSum <- df %>%
  # 将所有变量转为"变量名-值"的长格式
  pivot_longer(everything(), names_to = "variable", values_to = "value") %>%
  # 按变量分组
  group_by(variable) %>%
  # 计算所需统计量
  summarise(
    n = length(value),
    mean = mean(value),
    sd = sd(value)
  ) %>%
  # 取消分组(可选,根据后续操作需求)
  ungroup()

print(VarSum)

两种方案都能满足你的需求,你可以根据自己的代码习惯选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:20:27