我有一个带有ID列的数据帧df
,例如A
,B
等。我还有一个包含某些ID的向量:
L <- c("A", "B", "E")
如何过滤数据帧以仅获取矢量中存在的ID?单独地,我将使用
subset(df, ID == "A")
但是如何对整个向量进行过滤呢?
发布于 2012-02-19 15:11:13
您可以使用%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
如果您的If是唯一的,则可以使用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
包。
发布于 2012-02-19 14:31:16
我认为你需要使用“匹配”。它将一个向量中的值与另一个向量中的值进行匹配,并在不匹配的地方给出NA。因此,您可以根据匹配的!is.na进行子集。
看到了吗?匹配,你可能会自己算出来,在这种情况下,你会学到比别人很快就会做的确切答案更多的东西,这只会鼓励你剪切和粘贴:)
https://stackoverflow.com/questions/9350025
复制相似问题