我将数据设置为:
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
答案 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)]