如何在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
相关产品推荐
相关产品推荐

