如何根据另一个 table 的值删除一个 table 中的行

How to delete rows in one table, based on the values of another table

我有问题。我有两个不同的 table。一个包含用户信息和他们的 ID 号,另一个 table 也有 ID 号和第二列说明用户是否是管理员。

Table 1

UserID AssigID Score      Date       Time

14532   23956   52      11.11.2017    401
12254   23956   22      18.11.2017    256
12644   23956   74      17.12.2012    365
11257   23957   45      10.10.2012    102
12667   23958   25      10.11.2012    109

Table 2

UserID  Admin

14532   TRUE
12254   FALSE
12644   FALSE
11257   FALSE
12667   FALSE

因为在table2 用户ID 14532 是管理员,我想从table1 中删除该用户的数据。 如何根据 Table 2 中的数据删除 table 1 中用户是管理员的行?

作为

基于 R 的可能方法:

tab1[tab1$UserID %in% tab2$UserID[!tab2$Admin],]

给出:

  UserID AssigID Score           TimeStamp TimeOnTask
2  12254   23956    22 2017-11-18 13:16:00        256
3  12644   23956    74 2012-12-17 13:18:00        365
4  11257   23957    45 2012-10-10 13:29:00        102
5  12667   23958    25 2012-11-10 13:40:00        109

这是做什么的:

  • tab2$UserID[!tab2$Admin] 给出了不是管理员的用户 ID 向量。 !tab2$Admin 部分确保只有非管理员的 ID 被 selected。
  • tab1$UserID %in% ... 你 select 只有来自 tab1 的用户 ID 在第一步的向量中。这 returns 一个逻辑向量,您随后用它子集 tab1

已用数据:

tab1 <- structure(list(UserID = c(14532L, 12254L, 12644L, 11257L, 12667L),
                       AssigID = c(23956L, 23956L, 23956L, 23957L, 23958L),
                       Score = c(52L, 22L, 74L, 45L, 25L),
                       TimeStamp = structure(c(1510402260, 1511007360, 1355746680, 1349868540, 1352551200), class = c("POSIXct", "POSIXt"), tzone = ""),
                       TimeOnTask = c(401L, 256L, 365L, 102L, 109L)),
                  .Names = c("UserID", "AssigID", "Score", "TimeStamp", "TimeOnTask"), row.names = c(NA, -5L), class = "data.frame")
tab2 <- structure(list(UserID = c(14532L, 12254L, 12644L, 11257L, 12667L),
                       Admin = c(TRUE, FALSE, FALSE, FALSE, FALSE)),
                  .Names = c("UserID", "Admin"), class = "data.frame", row.names = c(NA, -5L))