首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在矢量上过滤数据帧

在矢量上过滤数据帧
EN

Stack Overflow用户
提问于 2012-02-19 22:26:49
回答 2查看 56.7K关注 0票数 31

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

代码语言:javascript
代码运行次数:0
运行
复制
L <- c("A", "B", "E")

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

代码语言:javascript
代码运行次数:0
运行
复制
subset(df, ID == "A")

但是如何对整个向量进行过滤呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-19 23:11:13

您可以使用%in%运算符:

代码语言:javascript
代码运行次数:0
运行
复制
> 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

如果您的If是唯一的,则可以使用match()

代码语言:javascript
代码运行次数:0
运行
复制
> 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

或者将它们设置为数据帧的行名,并逐行提取:

代码语言:javascript
代码运行次数:0
运行
复制
> rownames(df) <- df$id
> df[L, ]
  id x
A  A 1
B  B 2
E  E 5

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

票数 59
EN

Stack Overflow用户

发布于 2012-02-19 22:31:16

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

看到了吗?匹配,你可能会自己算出来,在这种情况下,你会学到比别人很快就会做的确切答案更多的东西,这只会鼓励你剪切和粘贴:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9350025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档