我有一个示例数据集。我的目标是保留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")
任何建议都将不胜感激!
答案 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