[英]Select rows within an overlapping range based on another column in R tidyverse
[英]Select rows by column value based on range of values in another column in R
我有一個與此類似的數據框:
x <- data.frame("A" = c(11:24),
"B" = c(25,25,25,25,25,37,37,16,16,16,16,16,42,42),
"C" = c(1:3,1:2,1:2,1:3,1:2,1:2))
A B C
11 25 1
12 25 2
13 25 3
14 25 1
15 25 2
16 37 1
17 37 2
18 16 1
19 16 2
20 16 3
21 16 1
22 16 2
23 42 1
24 42 2
我只想保留 B 中的每個值至少具有 C 中所有值 (1-3) 之一的行。所以我的結果看起來像:
A B C
11 25 1
12 25 2
13 25 3
14 25 1
15 25 2
18 16 1
19 16 2
20 16 3
21 16 1
22 16 2
我似乎無法在搜索答案時找到正確的關鍵字。
我們可以在按'B'分組后使用all
library(dplyr)
x %>%
group_by(B) %>%
filter(all(1:3 %in% C))
# A tibble: 10 x 3
# Groups: B [2]
# A B C
# <int> <dbl> <int>
# 1 11 25 1
# 2 12 25 2
# 3 13 25 3
# 4 14 25 1
# 5 15 25 2
# 6 18 16 1
# 7 19 16 2
# 8 20 16 3
# 9 21 16 1
#10 22 16 2
另一種選擇是使用data.table
來計算每個 B 的唯一 C,然后過濾您的數據以僅包含具有 3 個不同 C 的 B
library(data.table)
setDT(x)
x[B %in% x[,length(unique(C)),by=B][V1==3,B]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.