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

如何按subject组将data frame中的重复day值替换为NA?

问题:分组替换重复值为NA

我有如下数据框:

subject <- c(1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5)
day <- c(20, 20, 20 , 20, 20, 40 , 40 , 40 , 40 , 50, 50, 50, 40, 40, 40, 40, 20, 20)

ex <- data.frame(subject, day)

需要实现:在每个subject分组内,仅保留第一个day值,其余重复的day替换为NA,最终得到如下结果:

subject day
1        1  20
2        1  NA
3        1  NA
4        1  NA
5        1  NA
6        2  40
7        2  NA
8        2  NA
9        2  NA
10       3  50
11       3  NA
12       3  NA
13       4  40
14       4  NA
15       4  NA
16       4  NA
17       5  20
18       5  NA

解决方案

方法1:使用dplyr(tidyverse)包

先确保安装并加载dplyr包,再按分组逻辑处理:

library(dplyr)

ex_processed <- ex %>%
  group_by(subject) %>%
  mutate(day = ifelse(row_number() == 1, day, NA)) %>%
  ungroup()

逻辑说明:按subject分组后,通过row_number()判断是否为组内第一行,是则保留原day值,否则替换为NA,最后取消分组状态。

方法2:使用基础R(无需额外包)

借助ave()函数实现分组替换:

ex_processed <- ex
ex_processed$day <- ave(ex_processed$day, ex_processed$subject, 
                        FUN = function(x) replace(x, -1, NA))

逻辑说明:ave()按subject对day列分组处理,自定义函数将每组除第一个元素外的所有值替换为NA。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:33:29