过滤矢量上的数据框

ada*_*888 25 r subset dataframe

我有一个数据帧df有一个ID列例如A,B等.我还有一个包含某些ID的向量:

L <- c("A", "B", "E")
Run Code Online (Sandbox Code Playgroud)

如何过滤数据框以仅获取向量中存在的ID?我会单独使用

subset(df, ID == "A")
Run Code Online (Sandbox Code Playgroud)

但是如何过滤整个矢量?

flo*_*del 46

您可以使用%in%运营商:

> df <- data.frame(id=c(LETTERS, LETTERS), x=1:52)
> L <- c("A","B","E")
> subset(df, id %in% L)
   id  x
1   A  1
2   B  2
5   E  5
27  A 27
28  B 28
31  E 31
Run Code Online (Sandbox Code Playgroud)

如果您的ID是唯一的,您可以使用match():

> df <- data.frame(id=c(LETTERS), x=1:26)
> df[match(L, df$id), ]
  id x
1  A 1
2  B 2
5  E 5
Run Code Online (Sandbox Code Playgroud)

或者将它们作为数据框的rownames并按行提取:

> rownames(df) <- df$id
> df[L, ]
  id x
A  A 1
B  B 2
E  E 5
Run Code Online (Sandbox Code Playgroud)

最后,对于更高级的用户,如果速度是一个问题,我建议调查data.table包.

  • 对于completness:你也可以使用`df [id%in%L,]` (2认同)