【发布时间】:2017-06-06 20:18:02
【问题描述】:
我有一个按季度划分的测试数据集:
> test
id quarter
1 7 Q1
2 7 Q1
3 5 Q1
4 8 Q1
5 3 Q1
6 6 Q1
7 10 Q1
8 3 Q2
9 10 Q2
10 8 Q2
11 2 Q2
12 7 Q2
13 6 Q2
14 6 Q3
15 9 Q3
16 6 Q3
17 4 Q3
18 9 Q3
19 2 Q3
20 5 Q4
21 8 Q4
22 10 Q4
23 7 Q4
24 1 Q4
25 8 Q4
subsets <-split(test, test$quarter, drop=TRUE)
for (i in 1:length(subsets)) {
assign(paste0("Q", i), as.data.frame(subsets[[i]]))
}
现在我的目标是找出Q3 中所有不在Q1 或Q2 中的唯一ID。我尝试使用%in% 运算符:
Q1_ids <- unique(Q1$id)
Q2_ids <- unique(Q2$id)
Q3_ids <- subset(unique(Q3$id), !(unique(Q3$id) %in% Q1_ids | Q2_ids))
但后来我收到了一个错误,operations are possible only for numeric, logical or complex types。我可以用一个向量作为子集,例如,如果我只使用 Q1_ids,但我不能使用逻辑运算符。使用subset() 函数或其他解决问题的方法是什么?
> dput(test)
structure(list(id = c(7, 7, 5, 8, 3, 6, 10, 3, 10, 8, 2, 7, 6,
6, 9, 6, 4, 9, 2, 5, 8, 10, 7, 1, 8), quarter = c("Q1", "Q1",
"Q1", "Q1", "Q1", "Q1", "Q1", "Q2", "Q2", "Q2", "Q2", "Q2", "Q2",
"Q3", "Q3", "Q3", "Q3", "Q3", "Q3", "Q4", "Q4", "Q4", "Q4", "Q4",
"Q4")), .Names = c("id", "quarter"), row.names = c(NA, -25L), class = "data.frame", index = structure(integer(0), "`__quarter`" = integer(0)))
【问题讨论】:
标签: r dplyr logical-operators