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

R语言中基于分组向量高效执行组内函数的方法

问题

我有一个表示分组信息的向量:

group = c(1,1,2,2,3,3,3)

这个向量对应3个分组:2个大小为2的分组,1个大小为3的分组。还有一个数值向量:

x = c(1.5, 3.1, 5.4, -4.5, 2.2, 4.4, 1.1)

目前我用for循环实现了组内求和:

sums = rep(0,3)
for (i in 1:3){
grp_ids = which(group == i)
sums[i] = sum(x[grp_ids])
}

想问在R语言里有没有更简便高效的方法?

更简便的实现方法

当然有,R内置了多个专门处理分组计算的函数,还有成熟的工具包能帮你省去手动写循环的麻烦,而且效率更高:

1. base R 内置的tapply()函数

这是处理向量分组计算最直接的工具,一行代码就能完成:

tapply(x, group, sum)

运行后会直接返回每个分组的求和结果,结果结构为数组,分组作为名称:

1    2    3 
 4.6  0.9  7.7 

2. base R 内置的aggregate()函数

如果希望结果以数据框形式呈现(更易读和后续处理),可以用aggregate():

aggregate(x ~ group, FUN = sum)

输出结果是包含分组和对应求和值的数据框:

group   x
1     1 4.6
2     2 0.9
3     3 7.7

3. 使用dplyr工具包(tidyverse生态)

如果你习惯使用tidy风格的代码,dplyr的分组语法会更直观,适合处理更复杂的分组任务:
首先确保安装并加载dplyr:

# 首次使用先安装
# install.packages("dplyr")
library(dplyr)

然后通过数据框分组计算:

data.frame(group = group, x = x) %>%
  group_by(group) %>%
  summarize(sum_x = sum(x))

输出结果为结构化的 tibble 数据框:

# A tibble: 3 × 2
  group sum_x
  <dbl> <dbl>
1     1   4.6
2     2   0.9
3     3   7.7

这些方法的底层都经过了优化,比手动编写for循环效率更高,尤其是在数据量较大时优势更明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:52:46