首页 > 解决方案 > 在R中排序和保持不同的重复行

问题描述

我有一个数据框,其中一列(名称)包含以下值 A、A、A、B、C、D、D、A、A、A、F、F、E、C、B 我想获取一个列表这些值的顺序意味着,我的结果应该看起来像 A、B、C、D、AF、E、C、B。

我尝试了以下代码:

data <- data %>%
group_by(ID) %>%
arrange(TIME) %>%
distinct(NAME)

但是,distinct允许一个名称在列表/序列中仅包含一次。

fastmatch此外,通过指定尝试使用库fmatch(NAME, unique(NAME),但遇到错误。

感谢您的帮助!

标签: rdplyr

解决方案


我们可以使用rleidfromdata.table根据相邻元素之间的值差异创建组,然后slice是第一行

library(dplyr)
library(data.table)
data %>%      
    arrange(ID, TIME) %>%
    group_by(ID, grp = rleid(NAME)) %>%
    slice(1)

数据

data <- data.frame(ID = rep(1:3, each = 5), TIME = Sys.Date() + 1:15,
         NAME = c("A","A","A","B","C","D","D","A","A","A","F","F","E","C","B"))
        

推荐阅读