假设我的数据如下,
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
,否则我们会失去第一行