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

如何按组提取指定值填充新列?缺失时用NA填充

R语言按分组提取指定值并填充整组的实现方法

需求说明

按type字段分组,从每组中提取grp为'a'对应的val值,将该值填充到新列的整组行中;若某组不存在grp为'a'的记录,则新列对应组的所有行填充NA。

示例数据

dd1 <- data.frame(type = c(1,1,1),
                 grp = c('a', 'b', 'd'),
                 val = c(1,2,3))
dd2 <- data.frame(type = c(2,2),
                 grp = c('a', 'b'),
                 val = c(8,2))
dd3 <- data.frame(type = c(3,3),
                  grp = c('b', 'd'),
                  val = c(7,4))

dd <- rbind(dd1, dd2, dd3)

尝试代码

dd %>% 
  group_by(type) %>% 
  mutate(#val_a = ifelse(grp == 'a', val , NA),
         val_a2 = val[grp == 'a'])

解决方案

利用dplyr的分组功能,直接提取每组中grp为'a'的val值,再通过向量广播填充整组。如果组内没有grp为'a'的记录,提取结果会自动返回NA:

library(dplyr)

dd %>% 
  group_by(type) %>% 
  mutate(val_a = val[grp == 'a'][1]) %>% 
  ungroup()

代码说明

  • group_by(type):按type字段分组
  • val[grp == 'a']:筛选当前组内grp为'a'的val值,无匹配时返回空向量
  • [1]:取筛选结果的第一个值(若为空向量则返回NA),分组环境下这个值会自动填充到当前组的所有行中
  • ungroup():取消分组,回到普通数据框结构

期望输出

# A tibble: 7 × 4
   type grp     val val_a
  <dbl> <chr> <dbl> <dbl>
1     1 a         1     1
2     1 b         2     1
3     1 d         3     1
4     2 a         8     8
5     2 b         2     8
6     3 b         7    NA
7     3 d         4    NA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 23:15:47