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

根据列中重复值删除行,保留每组最后一行

解决方案

先分析你之前的代码问题:

  • 第二段代码distinct(Value, .keep_all = TRUE)逻辑错误:该函数默认保留每组重复值的第一行,和你需要保留最后一行的需求不符,所以结果不符合预期。
  • 第一段代码理论上是正确的,但可能因为未加载dplyr包、变量名不匹配(比如你用df但实际数据框叫data),或者数据读取时未正确处理分号分隔,导致执行失败。

下面是几种可行的正确方法:

方法1:dplyr 分组取每组最后一行(修正你的原代码)

确保先加载dplyr包,且变量名匹配:

library(dplyr)

# 正确读取分号分隔的数据(如果还未读取)
df <- read.table(text = "Row;Value
1;200
2;300
3;300
4;600
5;450
6;450", sep = ";", header = TRUE)

# 过滤保留每组重复值的最后一行
filtered_df <- df %>%
  group_by(Value) %>%
  filter(row_number() == n()) %>%  # n()代表每组的总行数,row_number()==n()即取组内最后一行
  ungroup()  # 可选,取消数据的分组状态

# 查看结果
print(filtered_df)

也可以用更直观的slice_tail替代filter:

filtered_df <- df %>%
  group_by(Value) %>%
  slice_tail(n = 1) %>%
  ungroup()

方法2:Base R 简洁实现

无需加载额外包,利用duplicated函数的fromLast参数:

# 读取数据(同上)
df <- read.table(text = "Row;Value
1;200
2;300
3;300
4;600
5;450
6;450", sep = ";", header = TRUE)

# fromLast=TRUE 会标记除最后一次出现外的所有重复值,取反后保留最后一行
filtered_df <- df[!duplicated(df$Value, fromLast = TRUE), ]

print(filtered_df)

两种方法都会得到你想要的结果:

Row Value
1   1   200
2   3   300
3   4   600
4   6   450

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 21:22:56