首页 文章

根据R [duplicate]中的两列删除重复项

提问于
浏览
1

这个问题在这里已有答案:

假设我的数据如下,

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

2 回答

  • 0

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

    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() 值,并返回非重复的值 .

  • 4

    使用 dplyr

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

    我们需要包含 row_number()==1 或我们丢失第一行

相关问题