【问题标题】:Filter based on a unique matching condition根据唯一匹配条件过滤
【发布时间】:2020-12-12 18:18:34
【问题描述】:

我正在尝试执行一个仅保留D 的命令,其中XY = "34" 时的相同。我认为一个相当简单的filter 可以解决问题,但我被卡住了。

数据如下:

 D   X     Y
 1   20    30
 2   22    34
 3   22    34
 4   22    36
 5   24    34
 6   24    34
 7   24    39
 8   28    39

我正在寻找的输出是这样的:

 D   X     Y
 2   22    34
 3   22    34
 4   22    36
 5   24    34
 6   24    34
 7   24    39

谢谢!

【问题讨论】:

    标签: r filter dplyr


    【解决方案1】:

    我们可以使用any来检查按'X'分组后'Y'中是否有值34以返回这些组

    library(dplyr)
    df1 %>%
       group_by(X) %>%
       filter(any(Y == 34))
    

    -输出

    # A tibble: 6 x 3
    # Groups:   X [2]
    #      D     X     Y
    #  <int> <int> <int>
    #1     2    22    34
    #2     3    22    34
    #3     4    22    36
    #4     5    24    34
    #5     6    24    34
    #6     7    24    39
    

    数据

    df1 <- structure(list(D = 1:8, X = c(20L, 22L, 22L, 22L, 24L, 24L, 24L, 
    28L), Y = c(30L, 34L, 34L, 36L, 34L, 34L, 39L, 39L)),
    class = "data.frame", row.names = c(NA, 
    -8L))
    

    【讨论】:

      【解决方案2】:

      使用subset + ave 的基本 R 选项

      > subset(df, ave(Y == 34, X, FUN = any))
        D  X  Y
      2 2 22 34
      3 3 22 34
      4 4 22 36
      5 5 24 34
      6 6 24 34
      7 7 24 39
      

      数据

      > dput(df)
      structure(list(D = 1:8, X = c(20L, 22L, 22L, 22L, 24L, 24L, 24L, 
      28L), Y = c(30L, 34L, 34L, 36L, 34L, 34L, 39L, 39L)), class = "data.frame", row.names = c(NA, 
      -8L))
      

      【讨论】:

        【解决方案3】:

        这是一个基本的 R 版本。

        制作数据(通常从文件中读取):

        data = data.frame(D = 1:8, X = c(20, 22, 22, 22, 24, 24, 24, 28), Y = c(34, 34, 36, 34, 34, 39, 39))
        

        并执行搜索:

        data[which(data$X %in% data$X[data$Y == 34]), ]
        

        这被捆绑在一行中,但基本上只是找到“X 与 Y 为 34 的 X 的任何值相同”的索引。 我希望这是有道理的!

        【讨论】:

          猜你喜欢
          • 2021-01-04
          • 2020-05-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多