如果我有一個小標題,其中每一行代表某個物件的一個??組件,并且多個組件共享和物件,有沒有辦法分析所有給定的物件組件并在不匹配某些條件時洗掉其對應的行?
例如,假設我想清理下表
tib <- tibble(object = c("a", "a", "a", "a", "b", "b", "b"),
component = c("x", "x", "y", "z", "x", "y", "y"),
data = 1:7)
我知道一個物件必須只包含一個組件“x”,因此物件“a”是無效的,因為它有兩個。因此,與物件“a”對應的所有四行都需要洗掉。
我知道 filter() 函式可以在整個組上作業,但我正在努力尋找一種方法來分析 filter 函式中的組。我認為我最接近的是下面,但它根本不起作用。也許我完全不在了。
tib %>%
group_by("object") %>%
filter(count(cur_data(), component)$b != 1)
uj5u.com熱心網友回復:
我們可以檢查sum(component == "x") < 2每個組中的條件:
library(dplyr)
tib %>%
group_by(object) %>%
filter(sum(component == "x") < 2)
#> # A tibble: 3 x 3
#> # Groups: object [1]
#> object component data
#> <chr> <chr> <int>
#> 1 b x 5
#> 2 b y 6
#> 3 b z 7
或者,我們可以使用unlist(table(component))["x]"來查看component == "x"每個組中出現的頻率。然后我們可以過濾那些有這個條件的組== 1。當我們要檢查多個變數的出現時,這種方法更加靈活。
library(dplyr)
tib %>%
group_by(object) %>%
filter(unlist(table(component))["x"] == 1L)
#> # A tibble: 3 x 3
#> # Groups: object [1]
#> object component data
#> <chr> <chr> <int>
#> 1 b x 5
#> 2 b y 6
#> 3 b z 7
由reprex 包于 2022-11-10 創建(v2.0.1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/531264.html
標籤:r筛选小标题分组表
上一篇:用lapply對列進行平方
