【问题标题】: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")

但是如何过滤整个向量?

【问题讨论】:

    标签: r dataframe subset


    【解决方案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 粘贴 :)

    【讨论】:

      猜你喜欢
      • 2018-10-22
      • 1970-01-01
      • 2021-03-16
      • 2021-04-18
      • 2021-10-31
      相关资源
      最近更新 更多