0

我的数据集为:

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)

我想通过 id 删除具有相同 x1 值的行,其中 ind=0。我喜欢得到类似的东西:

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
4

3 回答 3

3

这可以解决问题:

data[!duplicated(interaction(data[c("id", "x1")]), fromLast = TRUE), ]
于 2013-10-20T15:31:32.893 回答
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
于 2013-10-20T15:16:16.227 回答
2

像这样的东西?

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

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

dataset[!(freq > 1 & ind ==0)]
于 2013-10-20T14:36:29.377 回答