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

R dplyr分组聚合调用nth()传动态n仅首组有值其余为NA问题

解决方案

核心错误原因

dplyr的nth()函数第二个参数接收的是当前分组内的相对行号,你代码中计算的是整个数据集的全局行号,除了第一个分组全局行号和组内行号一致外,其余分组传入的全局行号都超出了组内的最大行数,因此返回NA。

修正代码

将计算得到的全局中点行号转换为组内相对位置即可,转换公式为:组内位置 = 全局中点行号 - 分组起始行号 + 1

library(dplyr)
df.summary <- df %>% 
  mutate(rn = row_number()) %>%
  group_by(grp = (cumsum(d)-1)%/% 100 + 1) %>%
  summarise(
    x = mean(x, na.rm = TRUE), 
    d = sum(d, na.rm = T), 
    i.start = first(rn), 
    i.end = last(rn), 
    mid_global = round(first(rn) + (last(rn) - first(rn))/2),
    y = nth(y, mid_global - i.start + 1)
  ) %>%
  as.data.frame()

注:你原代码中d=sum(d, na.rm=T), ,i.start=first(rn)部分多了一个多余的逗号,修正代码已同步删除。

运行结果

查看前6行输出,所有分组的y值都可以正常提取:

grp          x         d i.start i.end mid_global        y
1   1 0.07458317  88.99342       1     4          2 19.78992
2   2 0.07594546  97.62130       5     8          6 19.78957
3   3 0.05353308 104.69683       9    12         10 19.78916
4   4 0.06498291 106.23468      13    16         14 19.78876
5   5 0.08601759  98.24939      17    20         18 19.78836
6   6 0.06262427  84.43745      21    23         22 19.78795

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:15:04