r - 如何根据另一个表的值删除一个表中的行
问题描述
我有个问题。我有两张不同的桌子。一个包含用户信息及其 ID 号,另一个表也包含 ID 号,第二列显示用户是否为管理员。
表格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
表 2
UserID Admin
14532 TRUE
12254 FALSE
12644 FALSE
11257 FALSE
12667 FALSE
由于在表 2 中用户 ID 14532 是管理员,我想从表 1 中删除该用户的数据。如何根据表 2 中的数据删除表 1 中用户为 Admin 的行?
作为
解决方案
基于 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。- 与您只选择第一步中向量中
tab1$UserID %in% ...
的用户 ID 。tab1
这将返回一个逻辑向量,您随后将使用该逻辑向量进行子集化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))
推荐阅读
- algorithm - 数组元素之和(任意顺序)等于 k 非连续元素
- node.js - axios 相当于 http 请求?
- linux - 退出/杀死/注销 linux 会话的最干净方法是什么?
- mongodb - Mongo DB Atlas 快照丢失
- javascript - 在没有 jQuery 的情况下调用 Bootstrap4 可折叠
- android - Kivy garden mapview 使用 Buildozer 部署错误
- mongodb - 如何获取 MongoDB 连接字符串?
- android - 如何在 gradle 6.0+ 上将类/枚举添加到设置 gradle 脚本?
- c# - 为什么相同的静态方法在不同的控制器中表现不同?
- html - Flickr 链接在 HTML 页面上不起作用