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

如何在R语言中按id分组将有效值上移至数据框顶部

R语言实现分组后有效值上移、NA下移(保留行数结构)

针对需求:按id分组,将values列的非NA值移至每组顶部,NA值移至每组下方,同时保留原数据的行数及id、itemid列的结构,以下是两种常用实现方式:

示例数据集

df <- data.frame(id = c(1,1,1,2,2,2,3,3,3,3),
                 itemid = c(1,2,3,1,2,3,1,2,3,4),
                 values = c(1,NA,0,NA,NA,0,1,NA,0,NA))

方法一:使用dplyr(tidyverse生态)

通过分组提取非NA值,再拼接对应数量的NA替换原列:

library(dplyr)

df_processed <- df %>%
  group_by(id) %>%
  mutate(values = c(na.omit(values), rep(NA, sum(is.na(values))))) %>%
  ungroup()

# 查看结果
df_processed

输出结果:

# A tibble: 10 × 3
      id itemid values
   <dbl>  <dbl>  <dbl>
 1     1      1      1
 2     1      2      0
 3     1      3     NA
 4     2      1      0
 5     2      2     NA
 6     2      3     NA
 7     3      1      1
 8     3      2      0
 9     3      3     NA
10     3      4     NA

方法二:使用data.table(适合大数据场景)

利用data.table分组语法实现,逻辑与dplyr一致,执行效率更高:

library(data.table)

setDT(df)
df_processed <- df[, values := c(na.omit(values), rep(NA, sum(is.na(values)))), by = id]

# 查看结果
df_processed

输出结果与方法一完全匹配目标数据集要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:35:25