簡體   English   中英

dplyr 組內的條件語句

[英]Conditional statements within groups in dplyr

使用 dplyr 我想使用條件語句總結數據集中的組,其中 a 中存在兩個條件觸發 TRUE 值,所有其他排列觸發 FALSE。 最好用一個例子來說明。 假設我們有一個數據集,其中每個 id 號內都有一個分類變量的多個觀察值

df <- data.frame(id = factor(c(1, 2, 2, 3, 3, 4, 4)),
                 l = factor(c("a", "a", "b", "a", "c", "b", "d")))

df

#   id l
# 1  1 a
# 2  2 a
# 3  2 b
# 4  3 a
# 5  3 c
# 6  4 b
# 7  4 d

現在說我希望僅當 id 組中同時包含ac時才會出現 TRUE。

如果 id 組a OR c ,我可以創建一個返回 TRUE 的條件,使用 dplyr 中的any() function

df %>%
  group_by(id) %>%
    summarise(ab = any(l %in% c("a", "c")))

#   id    ab   
#  <fct> <lgl>
# 1 1     TRUE 
# 2 2     TRUE 
# 3 3     TRUE 
# 4 4     FALSE

any()的文檔中,它說all()做相反的事情。

library(dplyr)

df %>%
  group_by(id) %>%
    summarise(ab = all(l %in% c("a", "c")))

#   id    ab   
#   <fct> <lgl>
# 1 1     TRUE 
# 2 2     FALSE
# 3 3     TRUE 
# 4 4     FALSE

這很接近但不太正確,因為 id 號 1 只有一個觀察結果,因此不能同時滿足這兩個條件。

誰能提出解決方案?

反轉%in%語句。

您想知道c("a", "c")的“所有”是否在組中,而不是所有組是否都在c("a", "c")

df %>%
     group_by(id) %>%
     summarise(ab = all(c("a", "c") %in% l))
#> # A tibble: 4 x 2
#>   id    ab   
#>   <fct> <lgl>
#> 1 1     FALSE
#> 2 2     FALSE
#> 3 3     TRUE 
#> 4 4     FALSE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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