Я пытаюсь условно отфильтровать фрейм данных, чтобы извлечь интересующие строки. То, что я пытаюсь сделать, отличается от обычной условной фильтрации тем, что включает в себя переменные правила, влияющие на пары столбцов.
В моем представлении ниже имитируется data.frame
, который включает 4 выборки: Control
, Drug_1
, Drug_2
и Drug_3
и парные сравнения между ними (разница показана как p_value
). Я хотел бы использовать этот фрагмент кода в функции, чтобы потенциально сравнить более 4 групп. Я попытался объединить критерии фильтрации с OR
операторами, но закончил довольно уродливым кодом.
Моя конечная цель - получить filtered_df
, который показывает все строки, в которых переменные group1
и group2
содержат пары данных, которые есть в моем списке comparisons
. Любая помощь приветствуется!
Лучший,
Atakan
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
# Make a mock data frame
gene <- "ABCD1"
group1 <- c("Control", "Control", "Control", "Drug_1", "Drug_1", "Drug_2")
group2 <- c("Drug_1", "Drug_2", "Drug_3", "Drug_2", "Drug_3", "Drug_3")
p_value <- c(0.4, 0.001, 0.003, 0.01, 0.3, 0.9)
df <- data.frame(gene, group1, group2, p_value)
df
#> gene group1 group2 p_value
#> 1 ABCD1 Control Drug_1 0.400
#> 2 ABCD1 Control Drug_2 0.001
#> 3 ABCD1 Control Drug_3 0.003
#> 4 ABCD1 Drug_1 Drug_2 0.010
#> 5 ABCD1 Drug_1 Drug_3 0.300
#> 6 ABCD1 Drug_2 Drug_3 0.900
# I'd like to filter rows when group1 and group2 matches the following pairs
comparisons <- list(c("Control", "Drug_1"), c("Control", "Drug_2"), c("Drug_2", "Drug_3"))
# I can filter by using one pair as follows:
filtered_df <- df %>%
filter(group1 == comparisons[[1]][1] & group2 == comparisons[[1]][2])
filtered_df
#> gene group1 group2 p_value
#> 1 ABCD1 Control Drug_1 0.4
Создано в 2018-06-29 пакетом Представить (v0.2.0).