【问题标题】:Filter based on matching condition in R [duplicate]基于R中的匹配条件过滤[重复]
【发布时间】:2020-12-11 22:00:20
【问题描述】:

我正在尝试执行一个命令,以仅保留 Y 列中“ID”与 X 列中相同的行。换句话说,如果 Y 列中的“ID”与X 列中的 ID。

编辑:这是接近但不完全存在的代码。我需要的是在 Y 列中添加一个条件。因此,它应该保留 X 列中的 ID 等于 Y 列中的 ID 当 Y 列 = '34' 时的行。

data %>%
  filter(ID %in% X == ID %in% Y)

【问题讨论】:

  • 查看“加入”功能。如果您需要更详细的帮助,请查看帮助部分如何通过最小的可重复示例提出一个好问题。
  • 你的意思是df %>% filter(x == y)

标签: r filter dplyr


【解决方案1】:

您可以使用 join 或只是执行以下操作:

df <- data.frame(x = 1:13, y = c(1:5,7:14))
    x  y
1   1  1
2   2  2
3   3  3
4   4  4
5   5  5
6   6  7
7   7  8
8   8  9
9   9 10
10 10 11
11 11 12
12 12 13
13 13 14

rows_to_select <- which(df$x==df$y,TRUE)

df[rows_to_select,]
  x y
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5

【讨论】:

    【解决方案2】:

    您可以在基础 R 中使用 'which' 函数。示例:

    set.seed(7) # create toy dataframe
    x1 <- sample(1:2, 10, replace = TRUE)
    x2 <- sample(1:2, 10, replace = TRUE)
    df <- data.frame(x1, x2)
    df
       x1 x2
    1   2  2
    2   2  1
    3   2  1
    4   1  1
    5   2  1
    6   2  2
    7   1  2
    8   1  1
    9   1  1
    10  1  2
    
    keep <- which(df$x1 == df$x2) # only this line
    keep
    1 4 6 8 9
    
    df2 <- df[keep , ] # and this line required for the reduced dataframe
    df2
      x1 x2
    1  2  2
    4  1  1
    6  2  2
    8  1  1
    9  1  1 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-31
      • 2018-02-04
      • 1970-01-01
      • 2014-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多