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

如何使用dplyr按组根据另一列值为新列填充对应值?

用dplyr实现分组赋值需求

Hey there, let's tackle this problem with dplyr—it's straightforward once you break down the grouping logic! Here's how you can generate the z1 column exactly as you need:

核心代码

library(dplyr)

# 你的原始数据
a <- data.frame(x=c('A','A','A','B','B','B'), y=c('Yes','No','No','Yes','No','No'), z=c(1,2,3,4,5,6))

# 生成z1列
a1 <- a %>%
  group_by(x) %>%
  mutate(z1 = z[y == 'Yes']) %>%
  ungroup()

# 查看结果
print(a1)

代码逻辑解释

  • group_by(x): 先按x列把数据分成两组(A组和B组),所有后续操作都会在每组内独立执行。
  • mutate(z1 = z[y == 'Yes']): 在每个分组里,我们筛选出y == 'Yes'对应的z值。因为你的每组里只有一个"Yes"条目,这个值会被自动"广播"到组内的所有行——所以Yes行保留自己的z值,No行直接复用组内Yes行的z值。
  • ungroup(): 完成分组操作后解除分组,让数据回到普通的数据框格式(可选,但推荐保持数据整洁)。

更稳健的版本(应对多Yes场景)

如果你的数据里某组可能存在多个"Yes"条目,你可以用first()或last()指定取第一个/最后一个Yes对应的z值,避免因返回多个值导致报错:

a1 <- a %>%
  group_by(x) %>%
  mutate(z1 = first(z[y == 'Yes'])) %>%
  ungroup()

运行结果

执行代码后,你会得到完全符合预期的输出:

# A tibble: 6 × 4
  x     y         z    z1
  <chr> <chr> <dbl> <dbl>
1 A     Yes       1     1
2 A     No        2     1
3 A     No        3     1
4 B     Yes       4     4
5 B     No        5     4
6 B     No        6     4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:23:08