在向量上过滤数据框[重复]

Posted

技术标签:

【中文标题】在向量上过滤数据框[重复]【英文标题】:Filtering a data frame on a vector [duplicate] 【发布时间】:2012-03-10 03:18:55 【问题描述】:

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

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

如何过滤数据框以仅获取向量中存在的 ID?个人而言,我会使用

subset(df, ID == "A")

但是如何过滤整个向量?

【问题讨论】:

【参考方案1】:

您可以使用%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(df) <- df$id
> df[L, ]
  id x
A  A 1
B  B 2
E  E 5

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

【讨论】:

为了完整性:您也可以使用df[id %in% L,] 不参加怎么办?【参考方案2】:

我认为您需要使用“匹配”。它将一个向量中的值与另一个向量中的值匹配,并在不匹配的地方给出 NA。那么你根据比赛的 !is.na 进行子集化。

看到 ?match ,您可能可以自己解决,在这种情况下,您将比从某人很快会做的确切答案中学到更多,这只会鼓励您剪切 n 粘贴 :)

【讨论】:

以上是关于在向量上过滤数据框[重复]的主要内容,如果未能解决你的问题,请参考以下文章

R使用标题向量创建空数据框[重复]

从列表中提取向量到数据框列[重复]

组合列表中的向量以创建数据框 R [重复]

[基于独立索引向量的多个条件过滤数据帧

如何将熊猫单列数据框转换为系列或numpy向量[重复]

根据属性过滤数据(data.frame)并将其分配给向量