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

