在向量上过滤数据框[重复]
Posted
技术标签:
【中文标题】在向量上过滤数据框[重复]【英文标题】:Filtering a data frame on a vector [duplicate] 【发布时间】:2012-03-10 03:18:55 【问题描述】:我有一个数据框 df
带有一个 ID 列,例如 A
、B
等。我还有一个包含某些 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 粘贴 :)
【讨论】:
以上是关于在向量上过滤数据框[重复]的主要内容,如果未能解决你的问题,请参考以下文章