1、背景简介
作为一名数据分析师,经常会遇到剔除数据集中重复记录的情况。而且,更多的时候剔除重复记录是按照某一个字段的取值来剔除。以前用Oracle数据库的时候,使用语句:row_number() OVER (PARTITION BY COL1 ORDER BY COL2)
来完成数据记录的剔重非常顺手且高效。那么在R语言中如何实现类似的功能呢?
2、R语言实现Oracle:row_number() 函数的功能
在R语言中,常用且功能强大的数据处理包dplyr
能够较好的解决该问题。下面贴出一个示例。
R代码如下:
library(tidyverse)
library(dplyr)
test_tbl <- as_tibble(data.frame(x = c(1,rep(1:3,each = 2)) , y = c(20,21,23,24,24,1,0)))
test_tbl %>%
group_by(x) %>%
arrange(x,desc(y)) %>%
mutate(rank = rank(desc(y), ties.method = "first")) %>%
filter(rank ==1)
输出结果如下。该代码实现功能:将数据集test_tbl
按照变量x(在实际数据工作中通常是ID)分组,然后对每一组的多条数据记录,按照变量y的取值降序排列后,取每一组的第一条记录;从而完成数据记录的剔重。