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

为数据框中含Ranking的变量生成均值列时代码返回NA,求解决

问题原因与修正方案

出错原因

你的代码中,lapply对每个Ranking变量计算出的是单个均值数值,通过do.call(cbind,...)组合后得到的是1行多列的矩阵。而原数据集行数多于1,当把这个维度不匹配的矩阵赋值给新列时,R的维度匹配规则会导致新列被填充为NA。

修正代码

基础R版本

直接在lapply中将均值重复为与原数据集行数一致的向量,确保新列维度匹配:

# 获取名称含Ranking的变量列表
ranking_variables = names(data)[grepl("Ranking", names(data))]

# 为每个变量生成对应均值列,重复均值至原数据行数
data[paste0(ranking_variables, "_mean")] <- lapply(data[ranking_variables], function(x) {
  rep(mean(x, na.rm = TRUE), nrow(data))
})

tidyverse版本(更简洁)

如果习惯使用dplyr,可以用across批量处理:

library(dplyr)

data <- data %>%
  mutate(across(starts_with("Ranking"), ~mean(.x, na.rm = TRUE), .names = "{col}_mean"))

验证示例

用你给出的测试数据验证:

# 构造测试数据
data <- data.frame(
  Ranking_blah = c(1, -1, NA),
  Ranking_bleh = c(0, 1, 0.5)
)

# 运行修正代码后,会得到期望的结果:
# Ranking_blah_mean列全为0,Ranking_bleh_mean列全为0.5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 12:54:27