如何在R数据框中为连续重复行保留首次Class值,非连续重复值重新保留
解决方案
针对你的需求,我们可以通过判断当前行的Class与前一行是否相同,来决定是否保留当前Class值——连续重复的仅保留首个,非连续的重复值则正常保留。以下提供两种实现方式:
方法一:使用dplyr包
library(dplyr) # 处理数据:连续重复的Class设为NA,非连续重复的保留 df_processed <- df %>% mutate(Class = ifelse(Class != lag(Class, default = ""), Class, NA))
方法二:使用Base R
# 生成标记向量:TRUE表示保留当前Class,FALSE表示不保留 keep_flag <- c(TRUE, df$Class[-1] != df$Class[-nrow(df)]) # 将不需要保留的Class替换为NA df_processed <- df df_processed$Class[!keep_flag] <- NA
处理后结果
处理后的数据框如下,符合你要求的规则(ID1和6的A均被保留,连续重复的Class仅留首个):
| ID | Class | Score |
|---|---|---|
| 1 | A | 45 |
| 2 | NA | 67 |
| 3 | NA | 87 |
| 4 | C | 33 |
| 5 | NA | 25 |
| 6 | A | NA |
| 7 | B | 67 |
| 8 | NA | 88 |
| 9 | D | 21 |
| 10 | NA | NA |
内容的提问来源于stack exchange,提问作者Stataq
相关产品推荐
相关产品推荐

