簡體   English   中英

根據 R 中另一列中的值范圍按列值選擇行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM