如何根据另一个 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))
我有问题。我有两个不同的 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))