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

R语言按ID列分组重复填充同组weight列有效值的实现方法

问题原因

你写的df %>% group_by(ID) %>% rep(weight)报错,是因为rep()不是dplyr链路中处理分组列的合法调用:管道操作会把前一步生成的分组tibble作为第一个参数传给rep(),但rep()的第一个参数要求是待重复的向量,传入整个数据框自然会触发报错,同时代码也没有指定修改weight列的动作,逻辑上不成立。

你的测试数据构造代码:

df<- data.frame(ID=c(1,1,1,2,2,3,3,3,4,4),weight=c(0,0,11,0,10,12,0,0,13,0))

目标是按ID分组后,把每组唯一的非零weight值填充到组内所有行。

实现方法

dplyr 实现(最简洁)

加载dplyr后用mutate修改列即可,分组后计算得到的单值会自动循环填充到组内每一行,不需要手动调用rep():

library(dplyr)
df1 <- df %>%
  group_by(ID) %>%
  mutate(weight = weight[weight != 0][1]) %>%
  ungroup()

运行后输出和你预期完全一致:

# A tibble: 10 × 2
      ID weight
   <dbl>  <dbl>
 1     1     11
 2     1     11
 3     1     11
 4     2     10
 5     2     10
 6     3     12
 7     3     12
 8     3     12
 9     4     13
10     4     13

代码中加[1]是为了取组内第一个非零值,适配你每组恰好有一个非零值的场景,避免异常报错。

base R 实现(无需加载第三方包)

如果不想依赖tidyverse生态,直接用基础包的ave函数就能完成分组计算:

df$weight <- with(df, ave(weight, ID, FUN = function(x) x[x != 0][1]))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:25:04