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

在R函数中为pivot_wider()的names_glue参数使用双大括号{{}}

解决R函数中pivot_wider的names_glue变量替换问题

默认情况下,tidyr::pivot_wider()生成的列名会把values_from的取值放在前面(比如n_Party A),而你需要将names_from的列取值作为前缀(比如Party A_n),这样排序后每个党派的绝对数和百分比列会相邻显示。你在函数中尝试用双大括号{{}}处理names_glue参数时出现了错误,核心问题是混淆了函数参数变量名和names_from列的实际取值。

解决方案

在pivot_wider()的names_glue参数中,不需要使用{{parties}},而是直接用内置的glue变量:

  • {.name}:对应names_from指定列的每一个取值(比如Party A、Party B)
  • {.value}:对应values_from指定的每一个元素(比如n、per)

修改后的完整代码如下:

# 创建示例数据集
Datensatz <- data.frame(Kandidat= c("Candidate A", "Candidate B", "Candidate C", "Candidate D"),
                 Partei = c("Party A", "Party B", "Party A", "Party C"),
                 Geschlecht = c("Male", "Female", "Female", "Female"))

# 修改后的统计函数
stats_sociodem <- function(data, var, parties){

  # 整体统计
  sv_stats_all <- data %>%
    group_by({{var}}) %>%
    summarise(all_n = n()) %>%
    mutate(all_per = prop.table(all_n) * 100)

  # 分党派统计
  sv_stats <- data %>%
    group_by({{var}}, {{parties}}) %>%
    summarise(n = n(), .groups = "drop_last") %>%  # 显式处理分组,避免警告
    mutate(per = prop.table(n) * 100) %>%
    pivot_wider(names_from = {{parties}},
                values_from = c("n", "per"),
                names_glue = "{.name}_{.value}"  # 用{.name}指代党派名称取值
                ) %>%
    select({{var}}, sort(names(.)))  # 按字母顺序排列列

  # 合并整体统计结果,用as_label简化变量名获取
  sv_stats_final <- left_join(sv_stats, sv_stats_all, by = rlang::as_label({{var}}))
  sv_stats_final
}

# 调用函数示例
stats_sociodem(Datensatz, Geschlecht, Partei)

关键修改说明

  • 核心调整:将names_glue改为"{.name}_{.value}",自动把党派名称作为前缀,拼接统计类型(n/per),实现你需要的列名格式
  • 添加.groups = "drop_last":在summarise中显式指定分组处理逻辑,避免R版本更新带来的分组残留警告
  • 替换变量名获取方式:用rlang::as_label({{var}})替代deparse(substitute(var)),更符合tidyeval语法规范

运行结果示例

# A tibble: 2 × 8
  Geschlecht `Party A_n` `Party A_per` `Party B_n` `Party B_per` `Party C_n` `Party C_per` all_n all_per
  <chr>            <int>         <dbl>       <int>         <dbl>       <int>         <dbl> <int>   <dbl>
1 Female               1          50             1         100             1         100       3    75  
2 Male                 1         100             0           0             0           0       1    25  

可以看到,列名已调整为Party A_n、Party A_per的格式,排序后每个党派的绝对数和百分比列相邻显示,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 17:41:05