过滤多个变量多次出现的记录

时间:2017-09-13 22:23:56

标签: r dplyr

我有一个示例数据集。我的目标是保留user_id plan_id不止一次出现的任何记录。我知道您可以使用

计算列中变量的频率
n_occur <- data.frame(table(test$user_id))

但是,如何计算两列中的变量频率,然后按原始数据集过滤多次? 例如,这是我的测试数据集:

> test
   user_id plan_id hour
1        1      10    2
2        2      10    4
3        3      20   23
4        4      20   12
5        5      10    8
6        1      10   10
7        5      20    6
8        1      20    5
9        1      20   18
10       5      10    7
11       1      30    6

这是预期的输出:

> output
  user_id plan_id hour
1       1      10    2
2       5      10    8
3       1      10   10
4       1      20    5
5       1      20    8
6       5      10   17

和数据:

> dput(test)
structure(list(user_id = c(1, 2, 3, 4, 5, 1, 5, 1, 1, 5, 1), 
    plan_id = c(10, 10, 20, 20, 10, 10, 20, 20, 20, 10, 30), 
    hour = c(2, 4, 23, 12, 8, 10, 6, 5, 18, 7, 6)), .Names = c("user_id", 
"plan_id", "hour"), row.names = c(NA, 11L), class = "data.frame")

任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:5)

您可以使用duplicated从开头和结尾检查id列,如果其中一行返回TRUE,则该行会出现多次;然后,您可以使用返回的逻辑向量对数据框进行子集化:

ids <- df[c('user_id', 'plan_id')]
df[duplicated(ids) | duplicated(ids, fromLast = TRUE),]

#   user_id plan_id hour
#1        1      10    2
#5        5      10    8
#6        1      10   10
#8        1      20    5
#9        1      20   18
#10       5      10    7