1
私は以下の例では、参加者ID、グループ識別子、および値をリストするデータフレームex_data
を持っています。次に、削除する必要のある特定の観測を示す2番目のデータフレームを作成します(remove_data
の例)。 dplyrまたは他のtidyverseこれらの組み合わせをフィルタリングする機能がありますか?私の下の努力では、参加者がその特定のグループにいたときのデータだけでなく、示された参加者のすべてのレコードを除外します。私はforループを使って所望の出力を得ることができました。これも参考にしました。変数のペアの組み合わせに基づくデータフレームのフィルタリング
library(tidyverse)
#> Loading tidyverse: ggplot2
#> Loading tidyverse: tibble
#> Loading tidyverse: tidyr
#> Loading tidyverse: readr
#> Loading tidyverse: purrr
#> Loading tidyverse: dplyr
#> Conflicts with tidy packages ----------------------------------------------
#> filter(): dplyr, stats
#> lag(): dplyr, stats
set.seed(1234)
ex_data <- data_frame(
id = rep(sample(1:100, 10), 2),
group = rep(c("a", "b"), each = 10),
score = rnorm(20)
)
ex_data
#> # A tibble: 20 x 3
#> id group score
#> <int> <chr> <dbl>
#> 1 12 a 0.50605589
#> 2 62 a -0.57473996
#> 3 60 a -0.54663186
#> 4 61 a -0.56445200
#> 5 83 a -0.89003783
#> 6 97 a -0.47719270
#> 7 1 a -0.99838644
#> 8 22 a -0.77625389
#> 9 99 a 0.06445882
#> 10 47 a 0.95949406
#> 11 12 b -0.11028549
#> 12 62 b -0.51100951
#> 13 60 b -0.91119542
#> 14 61 b -0.83717168
#> 15 83 b 2.41583518
#> 16 97 b 0.13408822
#> 17 1 b -0.49068590
#> 18 22 b -0.44054787
#> 19 99 b 0.45958944
#> 20 47 b -0.69372025
remove_data <- data_frame(
id = sample(ex_data$id, 3),
group = sample(c("a", "b"), 3, replace = TRUE)
)
remove_data
#> # A tibble: 3 x 2
#> id group
#> <int> <chr>
#> 1 62 b
#> 2 97 a
#> 3 60 b
# Current efforts
ex_data %>%
filter(!(id %in% remove_data$id & group %in% remove_data$group))
#> # A tibble: 14 x 3
#> id group score
#> <int> <chr> <dbl>
#> 1 12 a 0.50605589
#> 2 61 a -0.56445200
#> 3 83 a -0.89003783
#> 4 1 a -0.99838644
#> 5 22 a -0.77625389
#> 6 99 a 0.06445882
#> 7 47 a 0.95949406
#> 8 12 b -0.11028549
#> 9 61 b -0.83717168
#> 10 83 b 2.41583518
#> 11 1 b -0.49068590
#> 12 22 b -0.44054787
#> 13 99 b 0.45958944
#> 14 47 b -0.69372025
# Desired output
for (i in 1:nrow(remove_data)) {
ex_data <- ex_data %>%
filter(!(id == remove_data$id[i] & group == remove_data$group[i]))
}
ex_data
#> # A tibble: 17 x 3
#> id group score
#> <int> <chr> <dbl>
#> 1 12 a 0.50605589
#> 2 62 a -0.57473996
#> 3 60 a -0.54663186
#> 4 61 a -0.56445200
#> 5 83 a -0.89003783
#> 6 1 a -0.99838644
#> 7 22 a -0.77625389
#> 8 99 a 0.06445882
#> 9 47 a 0.95949406
#> 10 12 b -0.11028549
#> 11 61 b -0.83717168
#> 12 83 b 2.41583518
#> 13 97 b 0.13408822
#> 14 1 b -0.49068590
#> 15 22 b -0.44054787
#> 16 99 b 0.45958944
#> 17 47 b -0.69372025