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

R函数内对因子列逐列删NA并0-1归一化计算统计量报错如何解决?

问题原因

map_df遍历数据框列时,传入summary_stats函数的data是单列向量,而drop_na()、summarise()都是仅支持处理数据框/tibble的tidyverse函数,无法直接作用于向量,因此会抛出方法不存在的错误。
你之前单独操作能成功,是因为操作对象是完整数据框,drop_na(x)作用于数据框后返回的仍是数据框,所以summarise可以正常调用。

修正后的代码

直接对传入的向量做处理即可,无需调用数据框专属操作:

library(tidyverse)

vars <- c('x', 'y', 'z')
names(vars) <- vars

summary_stats <- function(data){
  # 因子转数值,过滤当前列的NA值
  num_vec <- as.numeric(data)
  num_vec_no_na <- na.omit(num_vec)
  # 0-1归一化
  data_norm <- (num_vec_no_na - min(num_vec_no_na)) / (max(num_vec_no_na) - min(num_vec_no_na))
  # 计算描述统计量
  tibble(
    n = length(data_norm), 
    mean = round(mean(data_norm), digits = 3), 
    sd = round(sd(data_norm), digits = 3), 
    se = round(sd/sqrt(n), digits = 3) 
  ) 
}

table <- map_df(
  df %>% dplyr::select(vars), 
  summary_stats, 
  .id = "covariate"
)

table

输出结果

# A tibble: 3 × 5
  covariate     n  mean    sd    se
  <chr>     <int> <dbl> <dbl> <dbl>
1 x            16 0.536 0.269 0.067
2 y            18 0.556 0.338 0.080
3 z            17 0.588 0.352 0.085

内容的提问来源于stack exchange,提问作者C.Robin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:18:03