我有问题。我有两张不同的桌子。一个包含用户信息及其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所示,userID 14532是一个管理员,我想从table1中删除该用户的数据。 如何在表1中删除用户为Admin的行,基于表2中的数据?
作为
答案 0 :(得分:2)
基础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% ...
,您只选择tab1
中来自第一步的向量中的用户ID。这将返回一个逻辑向量,随后您可以使用该向量进行子集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))