3

在中,您可以使用限定符SQL限制查询结果。WHERE EXISTS例如,这个:

SELECT *
FROM Table_B
WHERE EXISTS (SELECT ID FROM TABLE_A)

你能在里面做同样的事情R吗?

我有一个大数据框 - 称之为 df.a。

str(df.a)
ClientID : Factor w/ 148892 levels
Month    : Date, format  "2012-07-31"
Visits   : int

我已将 df.a 子集化为更小的 df.b。现在,我想返回 df.a,但仅在 clientID 在 df.b 中时才获取记录。

我可以merge像这样使用 ,但我希望有一个更优雅的解决方案。

july.activity <- merge(df.a, df.b, by="ClientID", all.x=TRUE)
july.activity <- subset(july.activity, Visits.x != "NA")
4

1 回答 1

3

也许这可以满足您的需要?

july.activity <- df.a[df.a$ClientID %in% df.b$ClientID & !is.na(df.a$Visits), ]

df.a <- data.frame(ClientID = factor(letters[c(1,2,2,3)]), Visits = c(1,NA,2,3))
df.b <- df.a[1:2,]
df.b
  ClientID Visits
1        a      1
2        b     NA
df.a
  ClientID Visits
1        a      1
2        b     NA
3        b      2
4        c      3
df.a[df.a$ClientID %in% df.b$ClientID & !is.na(df.a$Visits), ]
  ClientID Visits
1        a      1
3        b      2
于 2012-08-03T18:53:29.900 回答