我正在寻找unique()
的等价物,但仅在连续的行上完成。即在以下示例中:
df <- data.frame(a = rep(c(1:3,1:3), each = 3), b = rep(c(4:6,4:6), each = 3))
unique(df)
# a b
#1 1 4
#4 2 5
#7 3 6
我想得到:
function_I_am_looking_for(df)
# a b
#1 1 4
#4 2 5
#7 3 6
#10 1 4
#13 2 5
#16 3 6
答案 0 :(得分:4)
我们可以使用rleid
创建分组变量,并使用slice
第一行
library(dplyr)
library(data.table)
df %>%
group_by(grp = rleid(a, b)) %>%
slice(1) %>%
ungroup %>%
select(-grp)
# A tibble: 6 x 2
# a b
# <int> <int>
#1 1 4
#2 2 5
#3 3 6
#4 1 4
#5 2 5
#6 3 6
与data.table
语法相同(由'a',b'的rleid
分组),提取第一个元素行索引(.I
)并以此子集进行行>
setDT(df)[df[, .I[1], .(rleid(a, b))]$V1]
或将unique
与by
一起使用
unique(setDT(df)[, grp := rleid(a, b)], by = "grp")
或者, OP首选版本,仅使用基本功能的通用data.frame
解决方案:
unique(cbind(rleidv(df), df))[,-1]