我有一个带有ID列的数据帧df
,例如A
,B
等。我也有一个包含某些ID的矢量:在一个向量上过滤一个数据帧
L <- c("A", "B", "E")
如何过滤数据帧以获取仅存在于矢量中的ID?单独来看,我会用
subset(df, ID == "A")
但我怎么就整向量过滤器?
我有一个带有ID列的数据帧df
,例如A
,B
等。我也有一个包含某些ID的矢量:在一个向量上过滤一个数据帧
L <- c("A", "B", "E")
如何过滤数据帧以获取仅存在于矢量中的ID?单独来看,我会用
subset(df, ID == "A")
但我怎么就整向量过滤器?
你可以使用%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
包。
我觉得你需要使用'匹配'。它将一个向量中的值与另一个向量中的值相匹配,并在没有匹配的情况下给出NA。那么你的子集就是基于!is.na的匹配。
看到了吗?比赛,你也许可以工作,自己出来,在这种情况下,你会学到比从确切的答案更有人将很快做到这只会鼓励你削减ñ粘贴:)
完整性:您也可以使用'df [id%in%L]'' – JaKu 2017-02-02 15:02:43