R WHERE EXISTS类型子集?

时间:2012-08-03 18:48:16

标签: r

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")

1 个答案:

答案 0 :(得分: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