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

R语言expss包:基于总例数隐藏mrset统计值的函数实现问题

修复后的R函数实现

原代码存在几个关键问题:

  • 用eval(rlang::parse_expr)拼接代码的方式不安全且易出错,应改用非标准求值语法构建参数
  • 错误使用data.table的:=语法修改expss表格对象,expss表格需要专属的修改逻辑
  • 总例数判断条件写成了<3,不符合需求的≤3
  • 获取有效例数的方式不正确,需从表格的「#Total cases」行提取数值

以下是修复后的完整代码:

library(expss)
library(rlang)

fun1 <- function(data, varlist, Banner) {
  # 安全构建mrset参数,避免字符串拼接风险
  t1 <- cross_cpct(data, mrset(!!!syms(varlist)), Banner)
  
  # 定位总例数所在行
  total_row <- which(rownames(t1) == "#Total cases")
  # 提取各列的总例数值
  total_cases <- as.numeric(t1[total_row, -1])
  
  # 筛选出总例数≤3的列索引(+1是因为第一列为行名)
  cols_to_replace <- which(total_cases <= 3) + 1
  
  # 替换对应列的内容(排除总例数行)
  if(length(cols_to_replace) > 0){
    t1[-total_row, cols_to_replace] <- "--"
  }
  
  return(t1)
}

# 示例数据
example <- data.frame(org = c("A", "B", "C", "D", "E", "F", "G"),
                      q1 = c("apple", "apple", NA, "apple", "apple", "apple", NA),
                      q2 = c(NA, NA, NA, "banana", "banana", "banana", NA),
                      q3 = c("orange", NA, "orange", "orange", NA, "orange", NA),
                      region = c("1", "1", "2", "3", "3", "2", "2"))

df <- example
banner <- list(df$region)

# 运行函数
result <- fun1(df, c("q1", "q2", "q3"), banner)
print(result)

输出结果

运行后将得到符合需求的表格:

123
apple------
banana------
orange------
#Total cases222

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 18:54:53