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

科研项目技术求助:按行汇总DataFrame指定列生成Group1

解决FRAMETRUE中1989-1995列按行求和生成Group1列的问题

我经常处理这类时序数据的行汇总需求,给你两个实用的解决方案,都能完美匹配你的需求:

方法一:基础R原生函数(快速直接)

用rowSums()是最直接的方式,它专门用来按行计算列的总和,还能轻松处理NA值:

# 选中1989到1995的列,按行求和,na.rm=TRUE自动忽略NA
FRAMETRUE$Group1 <- rowSums(FRAMETRUE[, c("1989", "1990", "1991", "1992", "1993", "1994", "1995")], na.rm = TRUE)

如果你的数据里没有NA值,可以去掉na.rm=TRUE参数;如果需要保留NA(只要行内有一个NA就返回NA),也可以去掉这个参数。

方法二:dplyr包(tidyverse风格,代码更易读)

如果你习惯用tidyverse系列工具,dplyr的写法更直观,尤其适合后续还要做其他数据处理的场景:

library(dplyr)

FRAMETRUE <- FRAMETRUE %>%
  rowwise() %>%  # 告诉dplyr按行进行操作
  mutate(Group1 = sum(c_across(1989:1995), na.rm = TRUE)) %>%  # 选中1989-1995列求和
  ungroup()  # 取消按行分组,避免影响后续操作

这里c_across(1989:1995)能直接选中列名在1989到1995之间的列(因为你的列名是数字型/字符型年份,范围选择生效),如果列名是带引号的字符,写成c_across("1989":"1995")也可以。

验证结果

拿你给的示例数据测试:

  • A行求和:3+3+5+2+3+4+2 = 22
  • B行求和:7+1+2+4+5+0+4 = 23
  • C行(忽略NA):10+15+1+3+2+2 = 33
  • D行(忽略NA):7+0+5+3+6+4 = 25
  • E行求和:5+1+2+4+0+3+5 = 20

这些结果都会准确存入新的Group1列里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:09:42