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

如何在R中按parent分组为数据框添加指定条件的px_val列?

在R数据框中按分组提取指定值生成新列

给定如下测试数据框:

df <- data.frame(
  parent=c('a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'),
  specific=c('x', 'y', 'z', 'x', 'y', 'z', 'x', 'y', 'z'),
  val=c(10, 11, 12, 20, 21, 22, 30, 31, 32)
)

需求是为每个parent分组添加新列px_val,值为该组中specific等于'x'对应的val值,最终得到如下结果:

parent specific val px_val
1      a        x  10     10
2      a        y  11     10
3      a        z  12     10
4      b        x  20     20
5      b        y  21     20
6      b        z  22     20
7      c        x  30     30
8      c        y  31     30
9      c        z  32     30

以下是几种无需循环的简洁实现方式:

方法1:使用dplyr(tidyverse生态)

加载dplyr包后,通过分组提取指定值并自动广播到整组:

library(dplyr)

df_new <- df %>%
  group_by(parent) %>%
  mutate(px_val = val[specific == 'x']) %>%
  ungroup()

print(df_new)

方法2:使用data.table(高效处理大数据)

转换为data.table对象后,按分组直接赋值,适合大样本量场景:

library(data.table)

setDT(df)
df[, px_val := val[specific == 'x'], by = parent]

print(df)

方法3:使用基础R(无需额外包)

用ave函数实现分组计算,不依赖第三方工具:

df$px_val <- with(df, ave(val, parent, FUN = function(v) {
  v[specific == 'x']
}))

print(df)

这三种方法都能高效实现需求,避免了繁琐的循环操作,可根据自身代码习惯选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:40:25