根据条件删除重复值

时间:2013-10-20 14:07:29

标签: r duplicates rows

我将数据设置为:

data <- read.table(text=
"id x1 x2 ind
1 2.5 11 0
1 4 13 0
1 4.6 14.5 0
2 0.5 10 0
2 2.5 12.5 0
2 2.5 12.5 1
2 4.6 16.5 0
3 0.5 11 0
3 4 14 0
3 4 14 1
4 0.5 11 0
4 3.5 15 0
4 5.5 16 0
4 5.5 16 1
4 10 15 0", header = TRUE)

我希望删除具有相同x1值的行,其中ind = 0 by id。 我喜欢这样的东西:

id x1 x2 ind
1 2.5 11 0
1 4 13 0
1 4.6 14.5 0
2 0.5 10 0
2 2.5 12.5 1
2 4.6 16.5 0
3 0.5 11 0
3 4 14 1
4 0.5 11 0
4 3.5 15 0
4 5.5 16 1
4 10 15 0

3 个答案:

答案 0 :(得分:3)

在基地R,

subset(data, !(ind == 0 & ave(x1, id, x1, FUN = length) > 1))

为了帮助理解,ave是返回每(id, x1)对的频率的原因:

with(data, ave(x1, id, x1, FUN = length))
# [1] 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1

答案 1 :(得分:3)

这样可以解决问题:

data[!duplicated(interaction(data[c("id", "x1")]), fromLast = TRUE), ]

答案 2 :(得分:2)

这样的东西?

library(data.table)
dataset <- data.table(dataset)

dataset[
   ,
   freq := .N,
   by = c("id","x1")
]

dataset[!(freq > 1 & ind ==0)]