基于R中的两列删除重复项

  • 本文关键字:删除 两列 基于
  • 更新时间 :
  • 英文 :


假设我的数据如下,

X    Y
26  14
26  14
26  15
26  15
27  15
27  15
28  16
28  16

我想删除重复的行。我可以通过以下命令

删除基于一列的重复行
dat[c(T, diff(dat$X) != 0), ] or dat[c(T, diff(dat$Y) != 0), ]

但是,只有当两个列具有相同的前一个值时,我才想删除重复项。我不能在这里使用unique,因为相同的数据以后还会出现。我想检查前一个值并计算它

我的示例输出是,

x   y
26  14
26  15
27  15
28  16

我们如何在R中做到这一点?

感谢

Ijaz

使用data.table v1.9.5 -安装说明:

require(data.table) # v1.9.5+
df[!duplicated(rleidv(df, cols = c("X", "Y"))), ]

rleidv()最好通过例子来理解:

rleidv(c(1,1,1,2,2,3,1,1))
# [1] 1 1 1 2 2 3 4 4

为每个连续运行的值生成唯一索引。

在特定列的list()data.frame()data.table()上也可以完成相同的操作。例如:

df = data.frame(a = c(1,1,2,2,1), b = c(2,3,4,4,2))
rleidv(df) # computes on both columns 'a,b'
# [1] 1 2 3 3 4
rleidv(df, cols = "a") # only looks at 'a'
# [1] 1 1 2 2 3

其余的应该是相当明显的。我们只检查duplicated()值,并返回不重复的值。

using dplyr:

library(dplyr)
z %>% filter(X != lag(X) | Y != lag(Y) | row_number() == 1)

我们需要包含row_number()==1,否则我们会失去第一行

最新更新