R语言如何在分组数据中保留变量首个值其余设置为NA
实现方案
你可以通过以下两种常用方式实现需求,无需自定义特殊函数:
方法1:使用dplyr包(tidyverse生态常用方案)
适合习惯tidyverse语法的场景,代码可读性高:
library(dplyr) # 假设你的原始数据框命名为df result <- df %>% # 按n_historia分组 group_by(n_historia) %>% # 仅保留组内第一行的指定列值,其余行设为NA mutate( fecha_primer_pos = ifelse(row_number() == 1, fecha_primer_pos, NA), fecha_ultimo_pos = ifelse(row_number() == 1, fecha_ultimo_pos, NA) ) %>% # 取消分组,避免后续操作受分组逻辑影响 ungroup()
如果需要先按某一字段(比如时间字段from)排序后再取首行,只需在group_by语句后加一行arrange(from)即可。
方法2:基础R实现(无需加载第三方包)
运行效率更高,适合处理大数据量场景:
# 生成每个n_historia分组内的行序号 group_rowid <- ave(rep(1, nrow(df)), df$n_historia, FUN = seq_along) # 直接将非首行的指定列赋值为NA df[group_rowid != 1, c("fecha_primer_pos", "fecha_ultimo_pos")] <- NA
内容的提问来源于stack exchange,提问作者jajb
相关产品推荐
相关产品推荐

