过滤矢量上的数据框

时间:2012-02-19 14:26:49

标签: r dataframe subset

我的数据框df带有ID列,例如AB等。我还有一个包含某些ID的向量:

L <- c("A", "B", "E")

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

subset(df, ID == "A")

但如何过滤整个矢量?

2 个答案:

答案 0 :(得分:41)

您可以使用%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

如果您的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

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

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

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

答案 1 :(得分:2)

我估计你需要使用'匹配'。它将一个向量中的值与另一个向量中的值进行匹配,并在没有匹配的情况下给出NA。那么你根据匹配的!is.na进行子集化。

看看?匹配,你可以自己解决这个问题,在这种情况下,你会学到的不仅仅是某个人很快会做的确切答案,这只会鼓励你剪掉n贴:)