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

如何对数据框中含偶数后缀的列重编码并添加分类均值列?

问题解决:数据框偶数后缀列重编码与均值计算

需求说明

对数据框中后缀为偶数的列(如N2、N4、N6、E2等)应用abs(x-6)函数重编码(自定义函数recode_items已实现),之后添加两列分别计算每行中N类列(N1-N6)、E类列(E1-E6)的均值。

示例数据与自定义函数

# 示例数据框
df1 <- tibble(id = 1:5, 
          N1 = c(4,3,2,5,4),
          N2 = c(1,1,3,2,5),
          N3 = c(5,5,2,4,3),
          N4 = c(4,2,2,2,1), 
          N5 = c(1,1,4,2,3),
          N6 = c(5,2,4,3,1),
          E1 = c(1,2,3,1,1),
          E2 = c(5,2,3,1,1), 
          E3 = c(2,2,1,3,1),
          E4 = c(1,1,1,3,2), 
          E5 = c(2,3,1,4,4), 
          E6 = c(3,2,3,3,1))

# 自定义重编码函数
recode_items <- function(reverse_items) {
  items <- abs(reverse_items - 6)
  return(items)
}

错误代码分析

原代码存在两处核心问题:

  • group_by(ends_with(c("2","4","6")))用法错误:group_by是用于按行分组统计的工具,不能用来选择列进行修改,这会导致分组逻辑完全偏离需求。
  • mutate(N = mean(N1:N6), E = mean(E1:E6))计算的是整列均值,而非每行的均值,最终所有行的N、E值会完全相同,不符合需求。

正确代码实现

使用dplyr的across函数精准选择目标列并应用重编码,再用rowMeans计算每行的均值:

library(dplyr)

recoded_df1 <- df1 %>%
  # 对后缀为2、4、6的列应用重编码函数
  mutate(across(ends_with(c("2", "4", "6")), recode_items)) %>%
  # 计算每行N类列的均值
  mutate(N_mean = rowMeans(select(., starts_with("N")), na.rm = TRUE),
         # 计算每行E类列的均值
         E_mean = rowMeans(select(., starts_with("E")), na.rm = TRUE))

代码说明

  • across(ends_with(c("2", "4", "6")), recode_items):精准匹配所有后缀为2、4、6的列,对每列批量应用recode_items函数完成重编码。
  • rowMeans(select(., starts_with("N")), na.rm = TRUE):先筛选所有以N开头的列,再计算每行的均值,na.rm = TRUE用于处理可能存在的缺失值。

运行后即可得到正确的重编码结果,以及每行对应的N类、E类列均值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:50:39